sha256("string or binary");
У меня возникла проблема с другим ответом.Я советую вам установить аргумент кодирования равным binary
, чтобы использовать байтовую строку и предотвратить различные хэши между Javascript (NodeJS) и другими языками / сервисами, такими как Python, PHP, Github ...
Если вы этого не сделаетеИспользуя этот код, вы можете получить различный хеш между NodeJS и Python ...
Как получить тот же хеш, что и Python, PHP, Perl, Github (и предотвратить проблему):
NodeJS хэширует UTF-8 представление строки.Другие языки (например, Python, PHP или PERL ...) хэшируют байтовую строку.
Мы можем добавить двоичный аргумент, чтобы использовать байтовую строку.
Код:
const crypto = require("crypto");
function sha256(data) {
return crypto.createHash("sha256").update(data, "binary").digest("base64");
// ------ binary: hash the byte string
}
sha256("string or binary");
Документация:
- crypto.createHash (алгоритм [, параметры]): Алгоритм является зависимымна доступных алгоритмах, поддерживаемых версией OpenSSL на платформе.
- hash.digest ([encoding]): Кодировка может быть 'hex', 'latin1' или 'base64',(база 64 длиннее).
Вы можете получить проблему с: sha256 ("\ xac"), "\ xd1", "\ xb9", "\ xe2", "\ xbb"," \ x93 "и т. д. *
Другие языки (например, PHP, Python, Perl ...) и мое решение с .update(data, "binary")
:
sha1("\xac") //39527c59247a39d18ad48b9947ea738396a3bc47
Узлы по умолчанию (без двоичного кода):
sha1("\xac") //f50eb35d94f1d75480496e54f4b4a472a9148752