Я не знаю, как реализовать эти несколько строк от php до java ..
$varInHex = "\x22\x33\xAd\xB5\x2b\xE6\x22\x33\x12\x36\x22\x31\xCA\x22\x11\x41\x62\x21\x22\x01\x55\x22\x71\x42\x10\x36";<br/><br/> $result = md5($varInHex); echo $result;
Ну, я попытался преобразовать его, но у меня получился другой результат!
byte[] seq20 = new byte[]{(byte)0x22,(byte)...etc...}; String str = seq20.toString(); String result = md5(str); System.out.println(result); public static String md5(String source) { try { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] bytes = md.digest(source.getBytes("UTF-8")); return getString(bytes); } catch (Exception e) { e.printStackTrace(); return null; } } private static String getString(byte[] bytes) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < bytes.length; i++) { byte b = bytes[i]; String hex = Integer.toHexString((int) 0x00FF & b); if (hex.length() == 1) { sb.append("0"); } sb.append(hex); } return sb.toString(); }
результат в java отличается от результата в php ..
Не могли бы вы мне помочь?? Заранее спасибо 🙂
Не можете ли вы использовать seq20 напрямую, не преобразовывая его так, чтобы строка? Я бы сделал это так:
md.update( seq20 ); byte[] md5sum = md.digest(); BigInteger bigInt = new BigInteger(1, md5sum); output = bigInt.toString(16); while ( output.length() < 32 ) { output = "0"+output; }
Ни один из двух других ответов утвердительно неверен, но с точки зрения элегантности рассмотрим следующие
String MD5(String... strings) { MessageDigest md = null; try { md = MessageDigest.getInstance("MD5"); for(final String s : strings) { md.update(s.getBytes()); } } catch (NoSuchAlgorithmException ex) { throw new RuntimeException("MD5 Cryptography Not Supported"); } final BigInteger bigInt = new BigInteger(1, md.digest()); return String.format("%032x", bigInt); }
edit: Использование String...
varargs полностью необязательно, но делает эту функцию немного проще, поскольку она позволяет избежать накладных расходов на конкатенацию строк в вызывающей функции.
Принятое решение:
md.update( seq20 ); byte[] md5sum = md.digest(); BigInteger bigInt = new BigInteger(1, md5sum); output = bigInt.toString(16); if ( output.length() == 31 ) { output = "0"+output; }
содержит реализацию, которая будет терпеть неудачу 1/256 раз, потому что выход md5sum может иметь более одного начального нуля. Пример ввода md5, который вызывает эту ошибку: «15446: 68106» (без кавычек).
Я рекомендую использовать apache commons DigestUtils.md5Hex, если вам нужен md5, соответствующий реализации php.
Взгляните на: http://www.sergiy.ca/how-to-make-java-md5-and-sha-1-hashes-compatible-with-php-or-mysql/
Эта ссылка была размещена здесь: Java md5, способ PHP
Я предполагаю, что PHP оценивает это как строку, а не шестую. И Java делает это, как вы ожидаете.