EN · DE · RU · FR · ES

#356: SmbEncrypt.java

projectforge-business/src/main/java/arlut/csd/crypto/SmbEncrypt.java Classe Java, projectforge-business/src/main/java/arlut/csd/crypto/SmbEncrypt.java 780 lignes · 452 code · 170 commentaires · 158 vides
Objectif : Fichier source : arlut/csd/crypto/SmbEncrypt.java. SmbEncrypt.java fait partie de l'application open-source de gestion de projet ProjectForge.

Source (100 premières lignes)

/*
   smbencrypt.java

   Créé : 15 mars 2001

   Portage Java par : Jonathan Abbey, jonabbey@arlut.utexas.edu

   -----------------------------------------------------------------------

   Basé sur smbencrypt.c et smbdes.c de Samba

   Implémentation Unix SMB/Netbios.
   Version 1.9.

   une implémentation partielle de DES conçue pour être utilisée dans le
   protocole d'authentification SMB

   Copyright (C) Andrew Tridgell 1998

   Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier
   selon les termes de la Licence Publique Générale GNU telle que publiée par
   la Free Software Foundation ; soit la version 2 de la Licence, soit
   (à votre discrétion) toute version ultérieure.

   Ce programme est distribué dans l'espoir qu'il sera utile,
   mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de
   QUALITÉ MARCHANDE ou d'ADÉQUATION À UN USAGE PARTICULIER. Voir la
   Licence Publique Générale GNU pour plus de détails.

   Vous devriez avoir reçu une copie de la Licence Publique Générale GNU
   avec ce programme ; sinon, écrivez à la Free Software
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
   02111-1307, USA

   -----------------------------------------------------------------------

   Système de gestion d'annuaire Ganymede

   Copyright (C) 1996-2010
   L'Université du Texas à Austin

   Informations de contact

   Site Web : http://www.arlut.utexas.edu/gash2
   Email de l'auteur : ganymede_author@arlut.utexas.edu
   Liste de diffusion : ganymede@arlut.utexas.edu

   Courrier postal :

   Computer Science Division
   Applied Research Laboratories
   The University of Texas at Austin
   PO Box 8029, Austin TX 78713-8029

   Téléphone : (512) 835-3200

   Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier
   selon les termes de la Licence Publique Générale GNU telle que publiée par
   la Free Software Foundation ; soit la version 2 de la Licence, soit
   (à votre discrétion) toute version ultérieure.

   Ce programme est distribué dans l'espoir qu'il sera utile,
   mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de
   QUALITÉ MARCHANDE ou d'ADÉQUATION À UN USAGE PARTICULIER. Voir la
   Licence Publique Générale GNU pour plus de détails.

   Vous devriez avoir reçu une copie de la Licence Publique Générale GNU
   avec ce programme. Sinon, consultez <http://www.gnu.org/licenses/>.

 */

package arlut.csd.crypto;


/*------------------------------------------------------------------------------
                                                                           classe
                                                                      smbencrypt

------------------------------------------------------------------------------*/

import java.util.Arrays;

/**
 * <p>Cette classe Java implémente les deux méthodes de hachage cryptographique utilisées
 * par les clients SMB. En particulier, les méthodes statiques LANMANHash() et NTUNICODEHash()
 * de cette classe effectuent les deux hachages requis pour les
 * entrées de mot de passe cryptées de Samba. En tant que telle, cette classe et les autres classes
 * du package largement nommé arlut.csd.crypto fournissent toutes les fonctions
 * de support nécessaires pour permettre à Ganymede de gérer le fichier de mots de passe de Samba.</p>
 *
 * <p>Les notes suivantes proviennent du code source original de Samba pour le
 * module smbdes.c, dont ce module est adapté.</p>
 *
 * <p>--------------------------------------------------</p>
 *
 * <p>Implémentation Unix SMB/Netbios.<br>
 * Version 1.9.</p>
 *
 * <p>une implémentation partielle de DES conçue pour être utilisée dans le
 * protocole d'authentification SMB</p>

Historique Git

0050a24d9 String password -> char[] password. Pas encore testé : client/maître LDAP et changement de mot de passe WLAN.
af35917ac Nettoyage de code supplémentaire
9ebb88522 Commit initial

0050a24d9

String password -> char[] password. Pas encore testé : client/maître LDAP et changement de mot de passe WLAN.
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>Cette classe Java implémente les deux méthodes de hachage cryptographique utilisées
  * par les clients SMB. En particulier, les méthodes statiques LANMANHash() et NTUNICODEHash()
@@ -727,17 +729,18 @@ public class SmbEncrypt {
    *
    * <p>Cette méthode hache les 128 premiers caractères du mot de passe,
    * avec la gamme Unicode complète et la préservation de la casse.</p>
+   *
+   * Refactorisé par Kai Reinhard pour la gestion des tableaux de caractères.
+   *
+   * @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();
-
     // nous devons simuler la représentation Unicode petit-boutiste de NT
     // avant de la passer à 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

Nettoyage de code supplémentaire
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 initial