Эквивалент функции PHP crypt в Java
Я переношу свой PHP-код в Google App Engine - Java.
Так что мне нужен эквивалент функции склепа PHP в Java,
поскольку я сохранил все пароли зарегистрированных пользователей
используя крипту в моей БД.
Изменить 1:
Вот мой php-код для шифрования паролей:
$password = "test123";
$ pwd = crypt ($ password, $password);
echo $pwd;
Выход (On Windows, а также сервер на основе Linux на HostMonser):
temjCCsjBECmU
Может ли кто-нибудь дать мне эквивалентный java-код?
Я пробовал различные перестановки и комбинации с помощью
MessageDigest, но не может понять это правильно.
Изменить 2:
Вот пример кода, который, как я думал, будет работать, но не сделал:
try {
{
String password = "test123";
MessageDigest digest = MessageDigest.getInstance( "MD5" );
byte[] passwordBytes = password.getBytes( );
digest.reset( );
digest.update( passwordBytes );
digest.update( passwordBytes );
byte[] message = digest.digest( );
StringBuffer hexString = new StringBuffer();
for ( int i=0; i < message.length; i++)
{
hexString.append( Integer.toHexString(
0xFF & message[ i ] ) );
}
String encrypted = hexString.toString();
System.out.println(encrypted);
} } catch (NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Ответы
Ответ 1
Вы должны знать, какая была реализация склепа PHP (MD5? SHA256? SHA512?), потому что в зависимости от вашей ОС несколько: http://php.net/manual/fr/function.crypt.php
Явный эквивалентный класс MessageDigest. Когда вы создаете экземпляр этого класса, вы предоставляете хэш-алгоритм, например:
MessageDigest md = MessageDigest.getInstance("MD5");
MessageDigest md2 = MessageDigest.getInstance("SHA-256");
MessageDigest md3 = MessageDigest.getInstance("SHA-512");
// etc.
byte[] encryptedPassword = md.digest("yourPassword".getBytes());
Ответ 2
Это старый поток, но я столкнулся с той же проблемой и нашел другое решение. Вы можете использовать классы UnixCrypt/Md5Crypt в библиотеке Apache Commons Codec 1.7.
Например, вы можете позвонить
UnixCrypt.crypt(string, salt)
ИЛИ
Md5Crypt.md5Crypt(byte[], salt)
Я не изучал другие типы шифрования, но я думаю, что они также являются другими утилитами.
Ответ 3
Кажется, вам нужно работать с устаревшей базой данных, уже заполненной паролями, которые вы не можете отменить, поэтому вы не можете просто переключиться на соленое MessageDigest, предпочтительно с использованием SHA-1. И ваша проблема усложняется, поскольку PHP-склеп - это оболочка, в которой может использовать один из нескольких алгоритмов. Но предположим, что ваш PHP использует оригинальный DES-основанный криптографический файл UNIX, тогда вам нужна реализация Java. Насколько я знаю, в стандартной установке Java не реализована криптография UNIX, но вы можете захотеть посмотреть здесь для списка варианты.
Ответ 4
Вам нужно взглянуть на классы java.security(что используется для JCE):
Там вы найдете все, что вам нужно, чтобы делать то, что вы хотите (в зависимости от того, какой алгоритм вам нужен).
http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/security/package-summary.html
например. MessageDigest для MD5/SHA и т.д.:
http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/security/MessageDigest.html
Отметьте их в отношении белого списка Google App Engine здесь, я не уверен, что поддерживается, а что нет.
http://code.google.com/appengine/docs/java/jrewhitelist.html
Материал java.security может быть немного больно работать, иногда вы можете использовать Jasypt - это более упрощенный API, который работает с любым JCE:
http://www.jasypt.org/
Ответ 5
PHP crypt поддерживает несколько хеш-функций. Если вы используете версию MD5 (хеш начинается с $1 $), здесь вы можете найти реализацию Java,
http://www.java2s.com/Open-Source/Java-Document/Groupware/LibreSource/md5/MD5Crypt.java.htm
Обратите внимание, что они используют свой собственный класс MD5. Я не уверен, что он такой же, как стандартный MD5.
Я уверен, что вы также можете найти реализацию Java для других алгоритмов хеширования.
Ответ 6
Ну, скрипт PHP на самом деле не шифрует, насколько я знаю. Я просто полагаю, что если ваш текущий сайт PHP использует криптографию MD5 или SHA256 или что-то еще, я бы ожидал, что вы сможете найти эти эквивалентные хэширующие классы/функции в Java.
Ответ 7
Я могу порекомендовать это: реализация MD5Crypt
MD5Crypt.crypt("youPassword"); // output: $1$zSiw0koU$i3Srfmoxx4VPePJHWqAuK/
Это одна из немногих реализаций, которая работает для меня.