EN · DE · RU · FR · ES

#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

Commit inicial