Я реализую интерфейс для сервиса цифровых платежей под названием Suomen Verkkomaksut .Информация об оплате отправляется им через HTML-форму.Чтобы гарантировать, что никто не испортит информацию во время передачи, хэш MD5 рассчитывается на обоих концах с помощью специального ключа, который не отправляется им.
Моя проблема в том, что по какой-то причине они, похоже, решили, чтовходящие данные кодируются с ISO-8859-1, а не UTF-8.Хэш, который я отправил им, рассчитывается с использованием строк UTF-8, поэтому он отличается от хэша, который они вычисляют.
Я пробовал это с помощью следующего кода:
String prehash = "6pKF4jkv97zmqBJ3ZL8gUw5DfT2NMQ|13466|123456||Testitilaus|EUR|http://www.esimerkki.fi/success|http://www.esimerkki.fi/cancel|http://www.esimerkki.fi/notify|5.1|fi_FI|0412345678|0412345678|esimerkki@esimerkki.fi|Matti|Meikäläinen||Testikatu 1|40500|Jyväskylä|FI|1|2|Tuote #101|101|1|10.00|22.00|0|1|Tuote #202|202|2|8.50|22.00|0|1";
String prehashIso = new String(prehash.getBytes("ISO-8859-1"), "ISO-8859-1");
String hash = Crypt.md5sum(prehash).toUpperCase();
String hashIso = Crypt.md5sum(prehashIso).toUpperCase();
К сожалению, оба хэшаидентично значению C83CF67455AF10913D54252737F30E21.Правильное значение для этого примера составляет 975816A41B9EB79B18B3B4526569640E в соответствии с документацией Суомен Verkkomaksut.
Есть ли способ вычисления хеша MD5 в Java со строками ISO-8859-1?
ОБНОВЛЕНИЕ: В ожидании ответа от Суомен Верккомаксут я нашел альтернативный способ создания хэша.Майкл Боргвардт исправил мое понимание String и кодировок, и я искал способ сделать хеш из байта [].
Apache Commons - отличный источник библиотек, и я нашел их класс DigestUtils, который имеет функцию md5hex, котораяпринимает байтовый ввод [] и возвращает шестнадцатеричную строку из 32 символов.
По какой-то причине это все еще не работает.Оба они возвращают одно и то же значение:
DigestUtils.md5Hex(prehash.getBytes());
DigestUtils.md5Hex(prehash.getBytes("ISO-8859-1"));