0

私の仕事は、CBC モードで AES-128 を復号化することです。これは、16 進数の文字列とキー (これも 16 進数) を既に暗号化する必要があるためです。次のような簡単なコードを試しました:

function doDecrypt(){
    var encryptedData = "1d4c76364618b6efce62258353f89810"
    var key = "11112222333344445555666677778888"; 

    encryptedData = CryptoJS.enc.Hex.parse(encryptedData);
    key = CryptoJS.enc.Hex.parse(key);

        var decrypted = CryptoJS.AES.decrypt(encryptedData, key);
    alert(CryptoJS.enc.Hex.stringify(decrypted));
}

私が得た結果は、空白の単語配列 (「解読済み」) です。

iv、salt などの追加情報が必要ですか?

4

1 に答える 1

3

「CBC モードの AES-128」はデータ形式ではありません。必要なメタデータとともに暗号化されたデータを書き込む普遍的な方法はありません。渡されたものと、それがどのように生成されたかを知る必要があります。次に、ほとんどの場合、CryptoJS で同じものを実装する方法を考え出すことができます。特に、次のことを知っておく必要があります。

  • 何のアルゴリズム?「AES-128」はあいまいです。「128 ビットのキー サイズの AES」を意味する場合もあれば、「128 ブロック サイズとその他のキー サイズの AES」を意味する場合もあります。
  • 鍵のサイズ (上記参照)
  • どのモード?(あなたはこれに答えました:それはCBCです。)
  • パディングとは何ですか?最も一般的なのは PKCS#7 ですが、パディングがない場合もあります。(CBC モードの場合、ほぼ確実に PKCS#7 です。)
  • IVとは何ですか?CBCには常にIVがあります。その IV が誤って NULL に設定されることがあります (これにより、CBC の安全性が低下します)。IV がパスワードから何らかの形で生成される可能性があります (これが OpenSSL の仕組みです)。
  • 適切なキー、安全でないキー、またはパスワードをお持ちですか。適切なキーは、キーのサイズの一連のランダムなバイトです。安全でない鍵とは、パスワードが (人間が入力した文字を鍵バッファーにコピーすることによって) 鍵のように扱われる場合です。これは非常に安全ではありませんが、非常に一般的です。
  • 適切なパスワードをお持ちの場合、それをキーに変換するために使用された KDF とパラメーターは何ですか? たとえば、彼らは OpenSSL KDF または PBKDF2 または bcrypt または scrypt を使用しましたか?
  • HMAC などの他のメタデータはありますか? (AES-CBC を保護するには HMAC が必要です。HMAC がないと、攻撃者は暗号文を変更して目的の平文に復号化できる場合があります。)

これらの答えが得られたら、CryptoJS でそれを実装する方法を考え出すことができます。

于 2013-02-11T17:49:17.497 に答える