2012-11-21 82 views
18

AESを使用してデータを暗号化する必要がありました。研究中私はAesCryptoServiceProviderクラスを発見しました。RijndaelManagedとAesCryptoServiceProvider(AES暗号化)

初期化ベクトル(IV)が何であるかわからなかったので、スタックオーバーフローでAESの例を検索してみたところ、this questionになりました。

なぜスタックオーバーフローリンクでRijndaelManagedクラスが使用されますか? RijndaelManagedAesCryptoServiceProviderクラスは同じことをしていますか?

+0

いいえ、同じことをしていません。 http://stackoverflow.com/a/4863924/328397 – LamonteCristo

+0

[RijndaelManagedとAesCryptoServiceProviderが異なる結果を返す理由]の複製が可能ですか?](http://stackoverflow.com/questions/957388/why-are-rijndaelmanaged-and- aescryptoserviceprovider-returning-different-results) –

答えて

25

AESはRijndaelに基づいていますが、ブロックサイズは128ビットに制限されています。 Rijndaelはより広い範囲のブロックサイズをサポートしており、多くの暗号ライブラリはAESを補完するために別々のRijndael実装を提供しています。

ブロックサイズ128,160,192,224,256ビットはRijndaelアルゴリズムでサポートされていますが、AES規格では128ビットブロックサイズのみが指定されています。 [Wikipedia]

あなたはRijndaelManagedクラスにリンクしました。 AESの同等クラスはAesManagedです。クラス間の違いについて

AesManagedは単にFIPS準拠していないとFIPSグループポリシーのフラグが設定されている場合は例外がスローされます使用された場合128 AesManagedRijndaelManagedに設定されたブロックサイズでRijndaelManagedを使用しています。 .NET Framework 4.6.2(2016年8月)は、AesCngクラスを追加しました。これは、AESアルゴリズムのCNGバージョンの実装です。

An IVは、特定の対称動作モード(たとえばCBCモード)で必要とされる、ブロックサイズと同じ長さのランダムデータです。典型的には、IVは、平文の第1のブロックまたは暗号文の第1のブロックと結合される(排他的論理和)。アイデアは、同じキーで同じメッセージを2回暗号化しても同じ出力が得られないようにすることです。

+0

Duncanに感謝します。どのようにしてブロックサイズを指定するのですか?例えば、Rijndaelは255ビットなどのより広範囲のブロックサイズをサポートしていると述べました。これはIVキーの長さによって決まりますか? 16バイトのキーを渡すと、256ビットの暗号化を使用する32バイトのIVキーを渡すと、128ビットの暗号化が使用されますか? –

+0

私はよくわかりません - 私はクラスを自分で使っていません。私が推測しなければならないのであれば、IV長から推論されていなければ、手動で 'BlockSize'プロパティを設定する必要があります。 –

+3

「AesManaged」に関しての相違に関する最後の声明は非常に間違っています。 'AesManaged'はブロックサイズを128に設定した' RijndaelManaged'を単に使用します。 'AesManaged'もFIPSに準拠しておらず、FIPSグループポリシーフラグが設定されていると例外がスローされます。現在.NETでは、CNGバージョンのAESアルゴリズムはサポートされていません。 –