#356: SmbEncrypt.java
projectforge-business/src/main/java/arlut/csd/crypto/SmbEncrypt.java Clase Java, projectforge-business/src/main/java/arlut/csd/crypto/SmbEncrypt.java 780 líneas · 452 código · 170 comentarios · 158 en blanco
Propósito: Archivo fuente: arlut/csd/crypto/SmbEncrypt.java. SmbEncrypt.java es parte de la aplicación de gestión de proyectos de código abierto ProjectForge.
Fuente (primeras 100 líneas)
/*
smbencrypt.java
Creado: 15 de marzo de 2001
Puerto Java por: Jonathan Abbey, jonabbey@arlut.utexas.edu
-----------------------------------------------------------------------
Basado en smbencrypt.c y smbdes.c de Samba
Implementación Unix SMB/Netbios.
Versión 1.9.
una implementación parcial de DES diseñada para su uso en el
protocolo de autenticación SMB
Copyright (C) Andrew Tridgell 1998
Este programa es software libre; puedes redistribuirlo y/o modificarlo
bajo los términos de la Licencia Pública General GNU publicada por
la Free Software Foundation; ya sea la versión 2 de la Licencia, o
(a tu elección) cualquier versión posterior.
Este programa se distribuye con la esperanza de que sea útil,
pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de
COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la
Licencia Pública General GNU para más detalles.
Deberías haber recibido una copia de la Licencia Pública General GNU
junto con este programa; si no, escribe a la Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, EE. UU.
-----------------------------------------------------------------------
Sistema de Gestión de Directorios Ganymede
Copyright (C) 1996-2010
The University of Texas at Austin
Información de contacto
Sitio web: http://www.arlut.utexas.edu/gash2
Correo electrónico del autor: ganymede_author@arlut.utexas.edu
Lista de correo electrónico: ganymede@arlut.utexas.edu
Correo postal:
Computer Science Division
Applied Research Laboratories
The University of Texas at Austin
PO Box 8029, Austin TX 78713-8029
Teléfono: (512) 835-3200
Este programa es software libre; puedes redistribuirlo y/o modificarlo
bajo los términos de la Licencia Pública General GNU publicada por
la Free Software Foundation; ya sea la versión 2 de la Licencia, o
(a tu elección) cualquier versión posterior.
Este programa se distribuye con la esperanza de que sea útil,
pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de
COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la
Licencia Pública General GNU para más detalles.
Deberías haber recibido una copia de la Licencia Pública General GNU
junto con este programa. Si no, visita <http://www.gnu.org/licenses/>.
*/
package arlut.csd.crypto;
/*------------------------------------------------------------------------------
clase
smbencrypt
------------------------------------------------------------------------------*/
import java.util.Arrays;
/**
* <p>Esta clase Java implementa los dos métodos de hash criptográfico utilizados
* por los clientes SMB. En particular, los métodos estáticos LANMANHash() y NTUNICODEHash()
* en esta clase realizan los dos hashes requeridos para las
* entradas de contraseña cifrada de Samba. Como tal, esta clase y las otras clases
* en el paquete ampliamente denominado arlut.csd.crypto proporcionan todas las funciones
* de soporte necesarias para permitir que Ganymede gestione el archivo de contraseñas de Samba.</p>
*
* <p>Las siguientes notas provienen del código fuente original de Samba para el
* módulo smbdes.c, del cual se adapta este módulo.</p>
*
* <p>--------------------------------------------------</p>
*
* <p>Implementación Unix SMB/Netbios.<br>
* Versión 1.9.</p>
*
* <p>una implementación parcial de DES diseñada para su uso en el
* protocolo de autenticación SMB</p>
Historial de Git
0050a24d9 String password -> char[] password. Aún no probado: cliente/maestro LDAP y cambio de Wlan-Password.
af35917ac Más limpieza de código
9ebb88522 Commit inicial
0050a24d9
String password -> char[] password. Aún no probado: cliente/maestro LDAP y cambio de Wlan-Password.
0050a24d94cf7b08c614508298c43974e84a25ac
diff --git a/projectforge-business/src/main/java/arlut/csd/crypto/SmbEncrypt.java b/projectforge-business/src/main/java/arlut/csd/crypto/SmbEncrypt.java
index c95f653ab..21aba9e57 100644
--- a/projectforge-business/src/main/java/arlut/csd/crypto/SmbEncrypt.java
+++ b/projectforge-business/src/main/java/arlut/csd/crypto/SmbEncrypt.java
@@ -78,6 +78,8 @@ package arlut.csd.crypto;
------------------------------------------------------------------------------*/
+import java.util.Arrays;
+
/**
* <p>Esta clase Java implementa los dos métodos de hash criptográfico utilizados
* por los clientes SMB. En particular, los métodos estáticos LANMANHash() y NTUNICODEHash()
@@ -727,17 +729,18 @@ public class SmbEncrypt {
*
* <p>Este método hashea los primeros 128 caracteres de la contraseña,
* con rango Unicode completo y preservación de mayúsculas/minúsculas.</p>
+ *
+ * Refactorizado por Kai Reinhard para el manejo de arreglos de caracteres.
+ *
+ * @param c_ary
+ * @return
*/
-
- public static String NTUNICODEHash(String password)
- {
- if (password.length() > 128)
+ public static String NTUNICODEHash(char[] c_ary) {
+ if (c_ary.length > 128)
{
- password = password.substring(0, 128);
+ c_ary = Arrays.copyOfRange(c_ary, 0, 128);
}
- final char c_ary[] = password.toCharArray();
-
// necesitamos simular la representación Unicode little endian de NT
// antes de pasar esto a md4
@@ -771,7 +774,7 @@ public class SmbEncrypt {
}
System.err.println(LANMANHash(argv[0]));
- System.err.println(NTUNICODEHash(argv[0]));
+ System.err.println(NTUNICODEHash(argv[0].toCharArray()));
System.exit(0);
}
}
af35917ac
Más limpieza de código
af35917ac240dadd71e1121f6e1e15d29e971aa9
diff --git a/projectforge-business/src/main/java/arlut/csd/crypto/SmbEncrypt.java b/projectforge-business/src/main/java/arlut/csd/crypto/SmbEncrypt.java
index ebb4b7f21..c95f653ab 100644
--- a/projectforge-business/src/main/java/arlut/csd/crypto/SmbEncrypt.java
+++ b/projectforge-business/src/main/java/arlut/csd/crypto/SmbEncrypt.java
@@ -277,9 +277,8 @@ public class SmbEncrypt {
out[i] = d[(i+count)%n];
}
- for (int i=0; i<n; i++)
- {
- d[i] = out[i];
+ if (n >= 0) {
+ System.arraycopy(out, 0, d, 0, n);
}
}
9ebb88522