フロントエンドは CryptoJS を使用して AES 復号化を実装します

        最近、そのようなビジネス シナリオがありました。バックエンドがインターフェイスから機密データを返すと、AES を使用して、機密化されていない ID 番号、携帯電話番号などの一部のフィールドが暗号化されました。これらの暗号化されたデータをフロント エンドで受け取りました。 . データを取得した後、最初に処理する必要があるのですが、その過程でいくつかの落とし穴を踏んだので、ここに記録します。

        まず第一に、バックエンドによって返される暗号化フィールドの暗号文のエンコード形式に注意してください。たとえば、バックエンドは 16 進数 / utf-8 / Base64 やその他のさまざまなベースの暗号文を返す場合があります。責任感があり経験豊富なバックエンドです。暗号化プロセスの詳細と返された暗号文の構造を教えてくれますが、残念なことに、今回協力したバックエンドはこれまで暗号化を行ったことがないはずです。彼は私が使用したキーを与えるだけです暗号化については自分で解読させてください。他にもいくつか質問しましたが、彼はそれらに答えることができませんでした。そこで、以前に何度か解読を試みましたが、null 値しか解析できませんでした。最終的には、オンラインの復号化されたウェブサイトの解析プロセスにより、最終的に復号化が完了しました。

        私のビジネス シナリオでは、バックエンドから返されるのは、16 進数で暗号化された暗号文と復号化用の 16 桁のキーです。オンライン復号化 Web サイトを参照してください。 AES オンライン復号化 AES オンライン暗号化 AES オンライン 16 進数キー - X オンライン ツール

 復号化プロセスを確認したところ、送信プロセス中に Base64 形式が使用され、最終的に Base64 が utf-8 平文に変換されたことがわかりました。

オンライン復号化プロセスを参照して、16 進暗号文 aes 復号化を実装しました。

  let hexString = "xxxxx16进制密文";
  // 密钥(必须与加密时使用的密钥相同)
  let key = 'xxxxx16位密钥';
  try {
    // 将字符串密文转换为字节数组
    let ciphertextBytes = CryptoJS.enc.Hex.parse(hexString);
    let keyBytes = CryptoJS.enc.Utf8.parse(key);
    let iv = CryptoJS.lib.WordArray.create(0); // 随机创建一个 iv,在 ECB 模式下,不需要iv
    // 进行解密操作
    let decryptedBytes = CryptoJS.AES.decrypt({ ciphertext: ciphertextBytes }, keyBytes, {
      iv,
      padding: CryptoJS.pad.Pkcs7,
      mode: CryptoJS.mode.ECB,
    });
    // 将解密后的字节数组转换为字符串
    let decryptedText = decryptedBytes.toString(CryptoJS.enc.Utf8);
    return decryptedText;
  } catch (error) {
    console.error('Decryption error:', error);
  }

  主なことは、暗号化と復号化のためのいくつかの構成項目についてバックエンドと合意することです。

        また、フロントエンドでは RSA 暗号化と復号化に JSEncrypt ライブラリを非常に便利に使用できることにも注意してください。

おすすめ

転載: blog.csdn.net/qq_42348464/article/details/132314192