Это общий вопрос о кодировке символов при использовании библиотек MD5 на разных языках. Меня беспокоит: предположим, я сгенерировал хеш MD5 с использованием нативного строкового объекта Python, например:
message = "hello world"
m = md5()
m.update(message)
Затем я беру шестнадцатеричную версию этого MD5-хеша, используя:
m.hexdigest()
и отправьте сообщение и MD5-хеш через сеть, скажем, через JMS-сообщение или HTTP-запрос.
Теперь я получаю это сообщение в программе на Java в виде нативной строки Java вместе с контрольной суммой. Затем я генерирую хеш MD5 с использованием Java, например, так (используя библиотеку кодеков Commons):
String md5 = org.apache.commons.codec.digest.DigestUtils.DigestUtils.md5Hex(s)
Мне кажется, что это неправильно, потому что я не указал кодировку символов на обоих концах. Таким образом, оригинальный хеш будет основан на байтах Python-версии строки; Java будет основываться на байтах Java-версии строки, эти две последовательности байтов часто не будут одинаковыми - это правда? Так что на самом деле мне нужно указать "UTF-8" или что-то еще на обоих концах, верно?
(На самом деле я получаю неустойчивую ошибку в моем коде, когда контрольная сумма MD5 не срабатывает, и я подозреваю, что это причина - но поскольку она прерывистая, трудно сказать, если это исправить, исправить это или нет.)
Спасибо!