@HamsterGamer

Есть ли разница для шифрования UTF-8 строк и ASCII строк через SHA-1?

Всем привет, в библиотеки boost для C++ есть реализация шифрования SHA-1, которая кастует любой массив данных к const char * (то есть по сути к элементам по 1 байту) и уже эту последовательность байт шифрует. С ASCII сообщениями этот алгоритм работает отлично (онлайн кодеры выдают такой же результат), но вот с какой-нибудь другой кодировкой (например по 2 байта на символ) оно выдаёт отличный от онлайн кодера результат.
Причем я не передаю просто массив wchar'ов, где элементы по 2 байта, я делаю явный каст к const char *, а размер указываю как "кол-во символов" * "размер символа в байтах". Подскажите, правильно ли я делаю или нужна реализация алгоритма под UTF-8, и если второе, то не могли бы вы также подсказать либы для C++, где эта версия SHA-1 присутствует? Я уже перепробовал несколько других библиотек и они также не поддерживают UTF-8 (их ответ отличается от ответа онлайн кодеров).

P.S. на вики алгоритм описывает работу с битами, поэтому я больше склоняют к тому, что тут действительно нужно просто поддерживать инвариант работы алгоритма в boost (кодировка неважна), который требует просто массив байт и кол-во байт в массиве.

https://wandbox.org/permlink/TUI6UxabUyUZuPWR - вот такая примерно реализация, однако на этом wandbox'e ответ не сошелся с тем же кодом на моей локальной машине. Подскажите где я ошибаюсь!?
  • Вопрос задан
  • 127 просмотров
Решения вопроса 1
Adamos
@Adamos
В UTF-8, UTF-16LE и UTF-16BE символ кириллицы занимает два байта.
Но в каждом из этих случаев это будут два РАЗНЫЕ байта.
Соответственно, алгоритм, работающий с байтами, выдаст РАЗНЫЙ хэш.
Вам, если вы не хотите разложить себе на дороге грабель, лучше приводить свою информацию к байтам самостоятельно, а не полагаться на какие бы то ни было "волшебные" библиотеки.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@HamsterGamer Автор вопроса
Вообщем пришел к такому результату: https://wandbox.org/permlink/r2kPawOj7nKx8dJA
Хотя там в бусте используется жуткий auto_ptr и как-то сомнительно, но всё же теперь SHA-1 код сходится с онлайн кодерами!

P.S. Разбираться с кодировками желания вот прям совсем нет, поэтому такое решение временно подойдет мне...
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы