#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