AES、128 和 256 无效密钥长度
AES, 128 and 256 Invalid Key Length
我正在尝试使用 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
吗?
字节通常是八位字节(8 位)。 AES 指定为 128 位块大小或 16 字节,这也是 IV 的大小。 AES 密钥大小可以分别为 128 位、192 位或 256 位或 16 字节、24 字节或 32 字节。他们不能和那些不同。所以将其用于 AES-256:
byte xAESKey[32];
byte xAESIv[16];
这应该与操作方式无关
用这种方式初始化块大小和密钥会更好一些,也更安全:
unsigned char iv[ CryptoPP::AES::BLOCKSIZE ];
unsigned char keyq[ CryptoPP::AES::MAX_KEYLENGTH ];
CryptoPP 也有像 CryptoPP::AES::MIN_KEYLENGTH 等常量
我正在尝试使用 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
吗?
字节通常是八位字节(8 位)。 AES 指定为 128 位块大小或 16 字节,这也是 IV 的大小。 AES 密钥大小可以分别为 128 位、192 位或 256 位或 16 字节、24 字节或 32 字节。他们不能和那些不同。所以将其用于 AES-256:
byte xAESKey[32];
byte xAESIv[16];
这应该与操作方式无关
用这种方式初始化块大小和密钥会更好一些,也更安全:
unsigned char iv[ CryptoPP::AES::BLOCKSIZE ];
unsigned char keyq[ CryptoPP::AES::MAX_KEYLENGTH ];
CryptoPP 也有像 CryptoPP::AES::MIN_KEYLENGTH 等常量