хеш — 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

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

1

Решение

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 использует старый код, который будет
лучше описывается таким термином, как Кекчак. Также остерегайтесь онлайн sha3
калькуляторы, потому что некоторые из них не были обновлены до SHA-3.

3

Другие решения

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

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

0