У меня есть сервер узла и приложение, поддерживающее реакцию. На сервере узла вся криптография выполняется с помощью модуля crypto
. В приложении, поддерживающем реакцию, вся криптография выполняется через библиотеку crypto-js
, потому что crypto
недоступен.
У меня есть этот пример кода на Repl.it - https://repl.it/repls/UprightExtraneousDesigner#index. js
Скопировано, чтобы предотвратить распад ссылок:
const crypto = require("crypto");
const base64url = require("base64url");
const CryptoJS = require("crypto-js");
let publicKey = "6rjJnHqufRdGq7LxP6UyJEDbE84YRUKyZNYc27rUBqQZ";
const hash1 = crypto.createHash("sha256").update(Buffer.from(publicKey)).digest();
const hash2 = CryptoJS.SHA256(publicKey);
const kid1 = base64url.encode(hash1)
const kid2 = CryptoJS.enc.Base64.stringify(hash2);
console.log("KID1: ", kid1);
console.log("KID2: ", kid2);
Но по какой-то причине они дают мне немного разные результаты. Результат, который я получаю:
KID1: qlm-6fOvD0F2qxOYDCvOkkohHfXL6nd_SpBDsBOWawE
KID2: qlm+6fOvD0F2qxOYDCvOkkohHfXL6nd/SpBDsBOWawE=
Здесь есть три отличия:
- KID1 имеет
-
в индексе 3, тогда как KID2 имеет +
- KID1 имеет
_
с индексом 31, тогда как KID2 имеет /
- KID1 не имеет заполнения, тогда как KID2 имеет заполнение в конце
Из-за расхождений здесь , У меня проблемы на моем сервере. Может кто-нибудь объяснить мне, почему это происходит и как я могу это исправить? Я думаю, это как-то связано с символами, используемыми в различных реализациях base64, но я не уверен, как это исправить.