3

ノードサーバーと反応ネイティブアプリがあります。ノード サーバーでは、すべての暗号化は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 つの違いがあります。

  1. KID1 には-インデックス 3 があり、KID2 には+
  2. KID1 には_インデックス 31 があり、KID2 には/
  3. KID1 にはパディングがありませんが、KID2 には最後にパディングがあります

ここに不一致があるため、サーバーで問題が発生しています。なぜこれが起こっているのか、どうすれば修正できるのかを誰かに説明してもらえますか? さまざまなbase64実装で使用されている文字と関係があると思いますが、それを修正する方法がわかりません.

4

2 に答える 2