Задать вопрос
@Hakhagmon

Почему в php и java получаются разные md5?

Есть приложение на java, которое генерирует мд5.
public class start {
	 
    public static void main (String[] args) throws java.io.UnsupportedEncodingException, java.security.NoSuchAlgorithmException {
      java.io.PrintStream sysout = new java.io.PrintStream(System.out, true, "UTF-8");
 
      String utf8_string = "¤3¤119829406¤2";
      sysout.println(utf8_string);
 
      java.security.MessageDigest md5 = java.security.MessageDigest.getInstance("MD5");
      byte[] md5_byte_array = md5.digest(utf8_string.getBytes());
 
      java.math.BigInteger md5_biginteger = new java.math.BigInteger(1, md5_byte_array);
      sysout.println(md5_biginteger.toString(16));
    }
  }


в результате получим 808b085b44dfa7d1ba351f2f33a608de

если же использовать стандартную функцию md5 на php, то md5 получается другой.

<?
print_r(iconv('WINDOWS-1251', 'UTF-8', md5("¤3¤119829406¤2")));

print_r(md5("¤3¤119829406¤2"));
?>


в обоих случаях получим - fcee312dd5fbbfbfb81e0e92d2ab0af6

я предполагаю, что тут проблема в кодировке, и что-то нужно еще добавить в php скрипт.
  • Вопрос задан
  • 761 просмотр
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
@bizon2000
Java-программист
Вот здесь: utf8_string.getBytes() не задана явно кодировка UTF-8, поэтому используется дефолтная кодировка платформы. Если нужно, чтобы PHP-скрипт выдавал такую же сумму, как java, задайте в нем соответствующую вашей платформе кодировку, в вашем случае это "ISO-8859-1"
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@MamOn
Вот тут работает, как ожидается: ideone.com/kg3ktQ

А всё потому, что системная кодировка там UTF-8. Проблемы именно в вызове метода String.getBytes(), как указали ранее. Но, если код нельзя менять, то можно запускать приложение в другой системной кодировке, передавая параметр -Dfile.encoding=UTF-8 в командную строку запуска java. Например:

java -Dfile.encoding=UTF-8 -jar ваша_программа.jar
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
правильно предполагаете

смотрите, как сделано в Питоне - никаких кодировок:
https://docs.python.org/3/library/hashlib.html
Ответ написан
Комментировать
miraage
@miraage
Старый прогер
Проверил кучу md5 онлайн сервисов.
Везде выдает fcee312dd5fbbfbfb81e0e92d2ab0af6.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽