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中提供的示例.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等常量。
相关文章:
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- 允许从 std::map 的密钥窃取资源?
- TMap::Emplace() 在应用现有密钥时会覆盖吗?
- 在没有密钥的情况下读取密文的剩余噪声预算
- 如何修复无效的API密钥,IP或操作权限错误?
- 所有可能的链接生成器与64位密钥
- 如何在unordered_map中更改密钥?
- 获取当前密钥状态?
- curl_easy_perform() 失败:SSL 对等证书或 SSH 远程密钥不正常
- 将密钥发送到非前台的游戏窗口
- 有哪些方法可以对基于 256 位密钥的矩阵进行加扰?
- 如何在精灵表上的两个不同部分之间来回切换,同时用户仍使用 SFML 持有密钥
- 如何将CNG密钥转换为OpenSSL EVP_PKEY(反之亦然)?
- 运行密钥密码解密知道密钥?
- std::unordered_map 运算符 [] 是否对非现有密钥进行零初始化?
- 错误:从 'char' 到 'const char' [-允许] strcat(加密,密钥[i])的转换无效;
- AES和密钥长度误差
- AES、128 和 256 密钥长度无效
- 小型固定长度密钥的快速哈希
- 加密++ DES实现和密钥长度