Эквивалентный из склепа PHP функционируют в Java

Я перемещаю свой код 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();
            }
14
задан dharm0us 20 July 2010 в 17:47
поделиться

5 ответов

Вы должны знать, какая реализация Используется шифрование 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());
5
ответ дан 1 December 2019 в 12:51
поделиться

Похоже, вам нужно работать с устаревшей базой данных, уже заполненной паролями, которые вы не можете сбросить, поэтому вы не можете просто переключиться на соленый MessageDigest , предпочтительно с использованием SHA- 1. И ваша проблема усложняется, поскольку крипта PHP - это оболочка, которая может использовать один из нескольких алгоритмов . Но предположим, что ваш PHP использует исходный шифрование UNIX на основе DES, тогда все, что вам нужно, - это его реализация на Java. Насколько мне известно, в стандартной установке Java нет реализации шифрования UNIX, но вы можете посмотреть здесь список опций.

2
ответ дан 1 December 2019 в 12:51
поделиться

Вам нужно взглянуть на классы 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/

1
ответ дан 1 December 2019 в 12:51
поделиться

Скрипт PHP поддерживает несколько хеш-функций. Если вы используете версию MD5 (хеш начинается с $ 1 $), вы можете найти реализацию Java здесь

http://www.java2s.com/Open-Source/Java-Document/Groupware/LibreSource/md5/MD5Crypt .java.htm

Обратите внимание, что они используют свой собственный класс MD5. Я не уверен, что он такой же, как стандартный MD5.

Я уверен, что вы можете найти Java-реализацию и для других алгоритмов хеширования.

1
ответ дан 1 December 2019 в 12:51
поделиться

Насколько я знаю, крипта PHP на самом деле не является шифрованием. Я считаю, что это просто оболочка для некоторых функций одностороннего хэширования, поэтому, если ваш текущий сайт PHP использует MD5 или SHA256 crypt или что-то еще, я ожидал, что вы сможете найти эти эквивалентные классы / функции хеширования в Java.

0
ответ дан 1 December 2019 в 12:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: