EN · DE · RU · FR · ES

#356: SmbEncrypt.java

projectforge-business/src/main/java/arlut/csd/crypto/SmbEncrypt.java Java-Klasse, projectforge-business/src/main/java/arlut/csd/crypto/SmbEncrypt.java 780 Zeilen · 452 Code · 170 Kommentare · 158 Leerzeichen
Zweck: Quelldatei: arlut/csd/crypto/SmbEncrypt.java. SmbEncrypt.java ist Teil der Open-Source-Projektmanagementanwendung ProjectForge.

Quellcode (erste 100 Zeilen)

/*
   smbencrypt.java

   Erstellt: 15. März 2001

   Java-Port von: Jonathan Abbey, jonabbey@arlut.utexas.edu

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

   Basierend auf smbencrypt.c und smbdes.c in Samba

   Unix SMB/Netbios-Implementierung.
   Version 1.9.

   Eine partielle Implementierung von DES, entwickelt für die Verwendung im
   SMB-Authentifizierungsprotokoll

   Copyright (C) Andrew Tridgell 1998

   Dieses Programm ist freie Software; Sie können es unter den Bedingungen
   der GNU General Public License, wie von der Free Software Foundation
   veröffentlicht, weitergeben und/oder modifizieren; entweder Version 2
   der Lizenz oder (nach Ihrer Wahl) jede spätere Version.

   Dieses Programm wird in der Hoffnung verbreitet, dass es nützlich sein wird,
   jedoch OHNE JEDE GEWÄHRLEISTUNG; sogar ohne die stillschweigende
   Gewährleistung der MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK.
   Siehe die GNU General Public License für weitere Details.

   Sie sollten eine Kopie der GNU General Public License zusammen mit diesem
   Programm erhalten haben; wenn nicht, schreiben Sie an die Free Software
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA

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

   Ganymede Directory Management System

   Copyright (C) 1996-2010
   The University of Texas at Austin

   Kontaktinformationen

   Webseite: http://www.arlut.utexas.edu/gash2
   Autor E-Mail: ganymede_author@arlut.utexas.edu
   E-Mail-Liste: ganymede@arlut.utexas.edu

   Postanschrift:

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

   Telefon: (512) 835-3200

   Dieses Programm ist freie Software; Sie können es unter den Bedingungen
   der GNU General Public License, wie von der Free Software Foundation
   veröffentlicht, weitergeben und/oder modifizieren; entweder Version 2
   der Lizenz oder (nach Ihrer Wahl) jede spätere Version.

   Dieses Programm wird in der Hoffnung verbreitet, dass es nützlich sein wird,
   jedoch OHNE JEDE GEWÄHRLEISTUNG; sogar ohne die stillschweigende
   Gewährleistung der MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK.
   Siehe die GNU General Public License für weitere Details.

   Sie sollten eine Kopie der GNU General Public License zusammen mit diesem
   Programm erhalten haben. Wenn nicht, siehe <http://www.gnu.org/licenses/>.

 */

package arlut.csd.crypto;


/*------------------------------------------------------------------------------
                                                                           Klasse
                                                                      smbencrypt

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

import java.util.Arrays;

/**
 * <p>Diese Java-Klasse implementiert die beiden kryptografischen Hash-Methoden,
 * die von SMB-Clients verwendet werden. Insbesondere führen die statischen
 * Methoden LANMANHash() und NTUNICODEHash() in dieser Klasse die beiden
 * Hashes durch, die für Samba's verschlüsselte Passworteinträge erforderlich
 * sind. Als solche bietet diese Klasse zusammen mit den anderen Klassen im
 * weit gefassten Paket arlut.csd.crypto alle notwendigen Unterstützungsfunktionen,
 * um Ganymede die Verwaltung von Samba's Passwortdatei zu ermöglichen.</p>
 *
 * <p>Die folgenden Hinweise stammen aus dem ursprünglichen Samba-Quellcode für
 * das Modul smbdes.c, von dem dieses Modul abgeleitet ist.</p>
 *
 * <p>--------------------------------------------------</p>
 *
 * <p>Unix SMB/Netbios-Implementierung.<br>
 * Version 1.9.</p>
 *
 * <p>Eine partielle Implementierung von DES, entwickelt für die Verwendung im
 * SMB-Authentifizierungsprotokoll</p>

Git-Verlauf

0050a24d9 String password -> char[] password. Noch nicht getestet: LDAP-Client/Master und Änderung des WLAN-Passworts.
af35917ac Weitere Code-Bereinigung
9ebb88522 Erster Commit

0050a24d9

String password -> char[] password. Noch nicht getestet: LDAP-Client/Master und Änderung des WLAN-Passworts.
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>Diese Java-Klasse implementiert die beiden kryptografischen Hash-Methoden,
  * die von SMB-Clients verwendet werden. Insbesondere führen die statischen
@@ -727,17 +729,18 @@ public class SmbEncrypt {
    *
    * <p>Diese Methode hasht die ersten 128 Zeichen des Passworts,
    * mit vollem Unicode-Bereich und Groß-/Kleinschreibungserhaltung.</p>
+   *
+   * Refactored von Kai Reinhard für die Handhabung von char-Arrays.
+   *
+   * @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();
-
     // wir müssen NTs Little-Endian-Unicode-Darstellung simulieren,
     // bevor wir dies an md4 übergeben
 
@@ -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

Weitere Code-Bereinigung
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

Erster Commit