ノードサーバーと反応ネイティブアプリがあります。ノード サーバーでは、すべての暗号化は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=
ここには 3 つの違いがあります。
- KID1 には
-
インデックス 3 があり、KID2 には+
- KID1 には
_
インデックス 31 があり、KID2 には/
- KID1 にはパディングがありませんが、KID2 には最後にパディングがあります
ここに不一致があるため、サーバーで問題が発生しています。なぜこれが起こっているのか、どうすれば修正できるのかを誰かに説明してもらえますか? さまざまなbase64実装で使用されている文字と関係があると思いますが、それを修正する方法がわかりません.