EN · DE · RU · FR · ES

#356: SmbEncrypt.java

projectforge-business/src/main/java/arlut/csd/crypto/SmbEncrypt.java Класс Java, projectforge-business/src/main/java/arlut/csd/crypto/SmbEncrypt.java 780 строк · 452 кода · 170 комментариев · 158 пустых
Назначение: Исходный файл: arlut/csd/crypto/SmbEncrypt.java. SmbEncrypt.java является частью приложения для управления проектами с открытым исходным кодом ProjectForge.

Исходный код (первые 100 строк)

/*
   smbencrypt.java

   Создан: 15 марта 2001 г.

   Порт на Java: Джонатан Эбби, jonabbey@arlut.utexas.edu

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

   Основано на smbencrypt.c и smbdes.c из Samba

   Реализация Unix SMB/Netbios.
   Версия 1.9.

   Частичная реализация DES, предназначенная для использования в
   протоколе аутентификации SMB

   Copyright (C) Эндрю Триджелл 1998

   Эта программа является свободным программным обеспечением; вы можете распространять ее и/или изменять
   ее в соответствии с условиями Стандартной общественной лицензии GNU, опубликованной
   Фондом свободного программного обеспечения; либо версии 2 Лицензии, либо
   (по вашему выбору) любой более поздней версии.

   Эта программа распространяется в надежде, что она будет полезной,
   но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии
   КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. Подробнее см. в
   Стандартной общественной лицензии GNU.

   Вы должны были получить копию Стандартной общественной лицензии GNU
   вместе с этой программой; если нет, напишите в Free Software
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
   02111-1307, USA

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

   Система управления каталогами Ganymede

   Copyright (C) 1996-2010
   Техасский университет в Остине

   Контактная информация

   Веб-сайт: http://www.arlut.utexas.edu/gash2
   Электронная почта автора: ganymede_author@arlut.utexas.edu
   Список рассылки: ganymede@arlut.utexas.edu

   Почта США:

   Отдел компьютерных наук
   Прикладные исследовательские лаборатории
   Техасский университет в Остине
   PO Box 8029, Austin TX 78713-8029

   Телефон: (512) 835-3200

   Эта программа является свободным программным обеспечением; вы можете распространять ее и/или изменять
   ее в соответствии с условиями Стандартной общественной лицензии GNU, опубликованной
   Фондом свободного программного обеспечения; либо версии 2 Лицензии, либо
   (по вашему выбору) любой более поздней версии.

   Эта программа распространяется в надежде, что она будет полезной,
   но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии
   КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. Подробнее см. в
   Стандартной общественной лицензии GNU.

   Вы должны были получить копию Стандартной общественной лицензии GNU
   вместе с этой программой. Если нет, см. <http://www.gnu.org/licenses/>.

 */

package arlut.csd.crypto;


/*------------------------------------------------------------------------------
                                                                           класс
                                                                      smbencrypt

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

import java.util.Arrays;

/**
 * <p>Этот класс Java реализует два криптографических хеш-метода, используемых
 * клиентами SMB. В частности, статические методы LANMANHash() и NTUNICODEHash()
 * в этом классе выполняют два хеширования, необходимых для
 * записей зашифрованных паролей Samba. Таким образом, этот класс и другие классы
 * в широко именуемом пакете arlut.csd.crypto предоставляют все вспомогательные
 * функции, необходимые для того, чтобы Ganymede мог управлять файлом паролей Samba.</p>
 *
 * <p>Следующие примечания взяты из исходного кода Samba для
 * модуля smbdes.c, от которого адаптирован этот модуль.</p>
 *
 * <p>--------------------------------------------------</p>
 *
 * <p>Реализация Unix SMB/Netbios.<br>
 * Версия 1.9.</p>
 *
 * <p>Частичная реализация DES, предназначенная для использования в
 * протоколе аутентификации SMB</p>

История Git

0050a24d9 String password -> char[] password. Пока не протестировано: клиент/мастер LDAP и смена Wlan-Password.
af35917ac Дополнительная очистка кода
9ebb88522 Первоначальный коммит

0050a24d9

String password -> char[] password. Пока не протестировано: клиент/мастер LDAP и смена 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>Этот класс Java реализует два криптографических хеш-метода, используемых
  * клиентами SMB. В частности, статические методы LANMANHash() и NTUNICODEHash()
@@ -727,17 +729,18 @@ public class SmbEncrypt {
    *
    * <p>Этот метод хеширует первые 128 символов пароля,
    * с полным диапазоном Unicode и сохранением регистра.</p>
+   *
+   * Рефакторинг Кая Рейнхарда для обработки массивов char.
+   *
+   * @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();
-
     // нам нужно смоделировать little endian представление Unicode от NT
     // перед передачей этого в 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

Дополнительная очистка кода
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

Первоначальный коммит