暗号化されたデータをフラッシュ (クライアント側) からサーバー側の javascript (asp で jscript として実行) に送信しようとしています。
いくつかの JavaScript Aes ライブラリがありますが、それらは事実上文書化されていません。私は crypto-js を試していますが、コードを動作させることができません。以下の例では、空の出力が生成されます。「6bc1bee22e409f96e93d7e117393172a」が生成されるはずです。
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1/build/rollups/aes.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1/build/components/mode-ecb.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1/build/components/pad-nopadding.js"></script>
<script>
var key = CryptoJS.enc.Hex.parse('2b7e151628aed2a6abf7158809cf4f3c');
var data = CryptoJS.enc.Hex.parse('3ad77bb40d7a3660a89ecaf32466ef97');
var decrypted3 = CryptoJS.AES.decrypt(data, key, {mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.NoPadding });
document.write("<br /> dec3: " + decrypted3.toString());
</script>
</body>
</html>
http://www.inconteam.com/software-development/41-encryption/55-aes-test-vectorsから文書化された作業キーと暗号化されたデータを取得しました
サーバーはクライアントで使用されるIVまたはソルトを認識しないため、IVまたはソルトを必要としない唯一のバージョンであるため、ECBを使用しているため、データを復号化できません。
上記がデータの復号化に失敗した理由、またはドキュメントの場所を知っている人はいますか?
更新: 数時間の試行錯誤の後、出力を生成する組み合わせを思いつきました: 7c121d95a84573b6120ada2ffff1ce3118561eba40555c0b ただし、これはまだ正しくありません。これを生成するために行われた変更は次のとおりです。
var decrypted3 = CryptoJS.AES.decrypt('3ad77bb40d7a3660a89ecaf32466ef97', key, {mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.NoPadding });
つまり、データを 16 進数の文字列として渡しましたが、これは正しくありませんが、少なくとも出力は生成されます。
次の問題はパディングの問題です。クライアントでは、NONE と PKCS#5 の 2 つのパディング戦略のみを提供する AS3 hurlant ライブラリを使用しています。crypto-js で利用可能な戦略は次のとおりです。
Pkcs7 (the default)
Iso97971
AnsiX923
Iso10126
ZeroPadding
NoPadding
これは、2 つのライブラリ間でデータを復号化する機会がなくなるということですか? 以前は、独自のパディング ハック (AS3 と Java の間) を作成して末尾のデータを追加または削除する必要がありましたが、これにはバイナリ データで数日間の試行錯誤が必要でした。クライアントから単一の暗号化された文字列を送信するより簡単な方法が必要です。サーバーへ。
SSL はオプションではありません。クライアント ユーザーは単純に Charles プロキシなどを使用して、暗号化されていないデータを表示して改ざんすることができます。