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.