Я пытаюсь вычислить хэш-код sha256 в кодировке base64 некоторого JavaScript в командной строке, используя OpenSSL и через PHP.
cat test.js | openssl dgst -sha256 -binary | openssl enc -base64
(p5CrWBV6O1Xp7BlWwdVXTeGeSx3uo/IsNaYOIOblAZk=)
echo base64_encode(hash("sha256", "alert('Test');", true));
(2D7QyY5W4ziVZhF/vzeGy8oHgnz4TjqaoifV41mHi3c=)
Результирующие значения в кодировке base64 не совпадают, но входные данные для каждого метода одинаковы. Возвращаясь назад, хеш-коды sha256 не совпадают до кодировки base64.
cat test.js | openssl dgst -sha256
(a790ab58157a3b55e9ec1956c1d5574de19e4b1deea3f22c35a60e20e6e50199)
echo hash("sha256", "alert('Test');");
(d83ed0c98e56e3389566117fbf3786cbca07827cf84e3a9aa227d5e359878b77)
Я не уверен, где проблема.
Я нашел проблему в конце, благодаря некоторой поддержке в Twitter.
При редактировании файла JS с помощью nano в конце добавлялся символ новой строки. Редактирование файла с помощью nano -L test.js
решил проблему.
cat
добавляет дополнительного символа новой строки, который идет для дайджеста. Попробуйте запустить дайджест по файлу напрямую:
openssl dgst -sha256 -binary test.js | ...