Предположим, у вас есть алгоритм sha-1, который принимает текст в качестве ввода вместо байтового массива.
(Например, есть несколько таких библиотек Javascript).
Когда вы хотите применить sha-1 к тексту (скажем, текст является паролем), вы сначала делаете кодировку utf-8, потому что текст может содержать многобайтовые символы. Другими словами, соответствующее целочисленное значение символа в тексте может быть больше, чем может содержать 8-битный байт. Поскольку алгоритм sha-1 работает на 8-битных единицах, он помогает сначала кодировать текст в utf-8.
Мой вопрос такой:
Если у вас есть нетекстовые двоичные данные, где значение каждого байта находится в диапазоне от 0 до 255, ожидается ли, что вы по-прежнему будете выполнять кодировку utf-8 для двоичных данных, прежде чем передавать их в алгоритм sha-1? Я знаю, что когда значения находятся в диапазоне от 0 до 127, utf-8 вообще не изменяет данные.
Однако, если значения находятся между 128 и 255, UTF-8 изменяет такие данные.
Итак, вот мой вопрос: что такое SHA-1 байта, содержащего значение 255 (все 1)?
With UTF-8 encoding: 730cf30d408ecf51aad876f5c491f837f7ddea4c
Without UTF-8 encoding: 85e53271e14006f0265921d02d4d736cdc580b0b
Какой из них правильный?