3

Crypto++ を使用してテキストを暗号化しようとしています。前回は AES CTR を使用したときはうまくいきましたが、CBC または GCM を使用する場合、使用できるキーの最大長は 32 ビットですか??

暗号化を処理するコード:

string xAESPlain, xAESCipher;
AutoSeededRandomPool xRng;

byte xAESKey[128]; // Doesnt Work has to be 32 or 16
byte xAESIv[128];

xRng.GenerateBlock(xAESKey, sizeof(xAESKey));
xRng.GenerateBlock(xAESIv, sizeof(xAESIv));

CBC_Mode< AES >::Encryption E;
E.SetKeyWithIV(xAESKey, sizeof(xAESKey), xAESIv);

StringSource ss(xAESPlain, true,
    new StreamTransformationFilter(E,
        new StringSink(xAESCipher)
    )
);

この Crypto++ を実行すると、次のものがスローされますException

terminate called after throwing an instance of 'CryptoPP::InvalidKeyLength'
  what():  AES/CBC: 128 is not a valid key length

Wiki で提供されている example.zip を使用する場合 (およびキーの長さを 256 または 128 に変更する場合) に同じことが起こることに注意してください。

Exceptionがスローされている理由はありますか?

4

2 に答える 2

7

バイトは通常、オクテット (8 ビット) です。AES は、IV のサイズでもある 128 ビットのブロック サイズまたは 16 バイトに対して指定されます。AES キーのサイズは、それぞれ 128 ビット、192 ビット、または 256 ビット、または 16 バイト、24 バイト、または 32 バイトです。それらはそれらと異なることはできません。したがって、これを AES-256 に使用します。

byte xAESKey[32];
byte xAESIv[16];

これは、動作モードとは関係ありません。

于 2015-02-03T20:00:21.110 に答える