Я перемещаю свой код PHP в Google App Engine - Java.
Таким образом, мне нужен эквивалент функции склепа PHP в Java,
так как я сохранил все пароли зарегистрированных пользователей
использование склепа в моем DB.
Редактирование 1: Вот мой код php для шифрования паролей:
$password = "test123";
$pwd = склеп ($password, $password);
$pwd эха;
Вывод (В Windows, а также основанном на Linux сервере на HostMonser):
temjCCsjBECmU
Кто-то может дать мне equivalted код 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();
}
Вы должны знать, какая реализация Используется шифрование PHP (MD5? SHA256? SHA512?), Потому что их несколько, в зависимости от вашей ОС: http://php.net/manual/fr/function.crypt.php
Эквивалентный класс Java это 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());
Похоже, вам нужно работать с устаревшей базой данных, уже заполненной паролями, которые вы не можете сбросить, поэтому вы не можете просто переключиться на соленый MessageDigest , предпочтительно с использованием SHA- 1. И ваша проблема усложняется, поскольку крипта PHP - это оболочка, которая может использовать один из нескольких алгоритмов . Но предположим, что ваш PHP использует исходный шифрование UNIX на основе DES, тогда все, что вам нужно, - это его реализация на Java. Насколько мне известно, в стандартной установке Java нет реализации шифрования UNIX, но вы можете посмотреть здесь список опций.
Вам нужно взглянуть на классы 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:
Скрипт PHP поддерживает несколько хеш-функций. Если вы используете версию MD5 (хеш начинается с $ 1 $), вы можете найти реализацию Java здесь
http://www.java2s.com/Open-Source/Java-Document/Groupware/LibreSource/md5/MD5Crypt .java.htm
Обратите внимание, что они используют свой собственный класс MD5. Я не уверен, что он такой же, как стандартный MD5.
Я уверен, что вы можете найти Java-реализацию и для других алгоритмов хеширования.
Насколько я знаю, крипта PHP на самом деле не является шифрованием. Я считаю, что это просто оболочка для некоторых функций одностороннего хэширования, поэтому, если ваш текущий сайт PHP использует MD5 или SHA256 crypt или что-то еще, я ожидал, что вы сможете найти эти эквивалентные классы / функции хеширования в Java.