CryptoJS Sha3 и PHP-SHA3

Я пытаюсь получить тот же результат, используя метод cryptojs sha3 и библиотеку php-sha3, но результаты просто не совпадают.

Пример:

Для CryptoJS

var hash = CryptoJS.SHA3("qwerty", { outputLength: 224 }).toString();

дает мне d7a12ecec4442f1b31eea5f7d5470f0ca6169463e09d91a147c3b8e8

пока с PHP-SHA3

echo sha3("qwerty",224);

дает мне 13783bdfa4a63b202d9aa1992eccdd68a9fa5e44539273d8c2b797cd

Я полный нуб шифрования, так что я предполагаю, что мне не хватает чего-то фундаментального в этом.

2 ответа

CryptoJS 'sha3' на самом деле, к сожалению, не использует текущий стандарт SHA-3 - отсюда и ваше несоответствие. Код реализует версию SHA-3, которая была заменена.

В 2014 году NIST внес небольшие изменения в представление Keccak и опубликовал FIPS 202, который стал официальным стандартом SHA-3 в августе 2015 года.

Цитируется из этого источника:

https://medium.com/@ConsenSys/are-you-really-using-sha-3-or-old-code-c5df31ad2b0

Который продолжает говорить:

К сожалению, readme в Github не упоминает, и пользователь должен посмотреть на старый сайт, чтобы найти "ПРИМЕЧАНИЕ: я допустил ошибку, когда назвал эту реализацию SHA-3. Он должен называться Keccak ". Таким образом, любые зависимые от CryptoJS, использующие sha3, используют старый код, который лучше описать таким термином, как Keccak. Также остерегайтесь онлайн-калькуляторов sha3, поскольку некоторые из них не были обновлены до SHA-3.

Артём прав. Вы можете попробовать эту библиотеку JS, https://github.com/emn178/js-sha3. Я могу использовать его для генерации хэшей SHA3 и Keccak.

Вы можете проверить хеш по адресу http://emn178.github.io/online-tools/sha3_224.html.

Другие вопросы по тегам