4

AES_128 を使用して SQL Server で暗号化をテストしています。同じテキスト (4111111111111111) を暗号化すると、暗号化されたバイナリ データは毎回異なります。

暗号化されたデータは毎回異なるため、初期化ベクトル (IV) を使用する必要がありますか? 私の理解では、IV は暗号化されたテキストの重複から保護して、どの値が同じであるかを識別できないようにするために使用されます。

AES のブロックチェーンの側面 (CBC、CTR) は、これらの異なる暗号化された値を作成しますか?

ここに例があります。これらは、同じ値 (4111111111111111) を 3 回暗号化した結果です。

0x00AC935A664E3C4D97DD1F4A5E316333010000003D6FAE7E02787F52BC5D08BFE9E728E39DFA6CE4FAE2CDCD29D22BB8BEFF3FE9D9A02E7235558BEB11A41C218601B4DE
0x00AC935A664E3C4D97DD1F4A5E31633301000000EDB2D01D6A4DD46241AA616CF74FC41A148EAE6B42E47F3B902F5A04D0021EC34FBE08D634A4C234540565BFB68CD578
0x00AC935A664E3C4D97DD1F4A5E31633301000000D9671BB79C344B0835BB0DCB2FDD58A9AF05095B5ECE0C27077C7A57242674D92D9E1233B1ED1AAA007655F8D53A3DC8
4

1 に答える 1

1

SQL Server 2008 は、ランダムに生成された IV 値など、大量のメタデータを暗号化された出力に追加します。出力の最後の部分だけが暗号化されたデータです。

SQL 以外のコンテキストでデータを復号化しようとしない限り、これは問題になりません。このような場合は、出力データの正確な形式を理解して、正しく復号化する方法を理解する必要があります。

この件に関する以前のスタックオーバーフローの質問 ( How to get compatibility between C# and SQL2k8 AES Encryption? ) は、可能な出力形式を示唆していますが、これは出力と完全には一致していないようです。提案された形式を使用して最初の出力例に適用すると、次のようになります。

00AC935A664E3C4D97DD1F4A5E316333 対称鍵の GUID
01000000 固定バージョン番号
3D6FAE7E02787F52BC5D08BFE9E728E3 Random IV
9DFA6CE4FAE2CDCD29D22BB8BEFF3FE9D9A02E7235558BEB11A41C218601B4DE ?? 32バイト

最後の値は、提案された形式と一致していないようです。これは、8 バイトのヘッダーに 16 バイトの倍数のデータを加えたものでも、28 バイトの拡張ヘッダー データに 16 バイトの倍数のデータを加えたものでもありません。おそらくあなたの出力は切り捨てられましたか?

于 2012-09-01T21:27:45.893 に答える