2015-08-20 3 views
-2

У меня есть JAVA AES шифрования логикиJava MD5 для PHP преобразования

private static byte[] getMD5(String input) { 
     try { 
     byte[] bytesOfMessage = input.getBytes("UTF-8"); 
      MessageDigest md = MessageDigest.getInstance("MD5"); 
      return md.digest(bytesOfMessage); 
     } catch (Exception e) { 
     } 
     return null; 
    } 

Что будет РНР эквивалент этой функции? Я использовал md5 ($ string) в php, но результат в обоих случаях отличается.

+0

Нет, код по-разному в обоих вопросах – genesis

+0

Код отличается, вы можете взять на это помощь и реализовать на своем кодексе, никто не предоставит вам точный код. –

+0

Когда я делаю String md5Value = new String (md.digest (bytesOfMessage)) в java; В php эквивалентно echo md5 ($ str, true); Можете ли вы предложить, как я могу преобразовать md5 ($ str, true) в md.digest (bytesOfMessage)? – genesis

ответ

1

В коде, который вы опубликовали, вы получаете массив байтов хеша md5. Функция md5() PHP возвращает хеш md5 как шестнадцатеричный.

Итак, если вы хотите получить md5 хэш как строку в Java вы можете, как это:

private static String getMD5(String input) { 
    try { 
     byte[] bytesOfMessage = input.getBytes("UTF-8"); 
     MessageDigest md = MessageDigest.getInstance("MD5"); 
     // byte array of md5 hash 
     byte[] md5 = md.digest(bytesOfMessage); 
     // we convert bytes to hex as php's md5() would do 
     StringBuffer stringBuffer = new StringBuffer(); 
     for (int i = 0; i < md5.length; i++) { 
      stringBuffer.append(Integer.toString((md5[i] & 0xff) + 0x100, 16).substring(1)); 
     } 
     return stringBuffer.toString(); 
    } catch (Exception e) { 
    } 
    return null; 
} 

С PHP вы можете получить строку md5 двоичный, делая md5('some string', true). См. md5() Документация по функциям.

Чтобы получить массив байтов, вы можете сделать unpack('c*', md5('some string',true)). См. Функцию unpack() и возможное значение formats для получения дополнительной информации.

+0

Спасибо Master_ex..Я не могу изменить код Java. Мне нужно реализовать версию PHP того же кода. Можете ли вы сказать мне в java, когда я прохожу SecretKeySpec skey = new SecretKeySpec (getMD5 (ключ), «AES»); .. Как я могу достичь этого в php? ... В Java я получаю bytesOfMessage = "[B @ 7b11a3ac" ... Пока в php Если я будет использовать распаковку, как упомянуто вами. Я получу массив. Пожалуйста, предложите – genesis

+1

. bytesOfMessage - это массив байтов. Если вы попытаетесь распечатать его, вы не увидите содержимое массива, но, как вы говорите, вы увидите что-то вроде '[B @ 7b11a3ac'. Однако, если вы печатаете значения один за другим, вы получите тот же контент. Вы можете сделать это как 'for (byte b: getMD5 (key)) System.out.println (b);'. Таким образом, оба варианта java и php эквивалентны. О SecretKeySpec, по-видимому, он работает, когда вы говорите, что хотите преобразовать Java-код в PHP. Я предлагаю вам прочитать о библиотеке [mcrypt] (http://php.net/manual/en/book.mcrypt.php) и задать другой вопрос, если у вас все еще есть проблемы. –

+0

Спасибо, тонна Master_ex ... Это помогло! – genesis

Смежные вопросы