当前位置: 首页 > 知识库问答 >
问题:

AES、128和256无效的密钥长度

卫才哲
2023-03-14

我正在尝试使用加密技术加密文本。上次使用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)
    )
);

运行此加密时会引发< code >异常:

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

请注意,使用Wiki中提供的示例时会发生同样的事情.zip(并将密钥长度更改为256或128)

知道为什么抛出异常吗?

共有2个答案

尹欣怿
2023-03-14

以这种方式初始化块大小和密钥更好也更安全:

unsigned char iv[ CryptoPP::AES::BLOCKSIZE ];
unsigned char keyq[ CryptoPP::AES::MAX_KEYLENGTH ];

CryptoPP还具有CryptoPP::AES::MIN_KEYLENGTH等常量。

益清野
2023-03-14

字节通常是八位字节(8位)。AES被指定为128位块大小或16字节,这也是IV的大小。AES密钥大小可以分别为128位、192位或256位或16字节、24字节或32字节。他们和那些人不可能不同。因此,将其用于AES-256:

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

这应该与运作模式无关。

 类似资料:
  • 问题内容: 此代码给出了无效的AES密钥长度错误。我该如何纠正?(我想要128位密钥AES加密) 任何帮助表示赞赏 问题答案: 使用a 从密码派生密钥字节。您可以在此处查看详细示例。请注意,您需要指定128位密钥的密钥长度,而不是该示例中所示的256位。 您将遇到的下一个问题是您没有指定填充方案。除非您的消息是16字节(AES块大小)的倍数,否则将引发错误。如示例所示,使用PKCS5Padding

  • 我希望有一个用C编写的程序,可以在没有openssl这样的大型库的帮助下,用AES-CBC对字符串进行编码/解码。 目标: 使用密码短语对字符串进行编码/解码: 因此,应用程序需要接受3个输入参数。。。 输入字符串(待编码)/或已编码字符串(待解码) 用于编码/解码字符串的密码 编码或解码指示器 我对C语言不熟悉(我可以用C#编码)。 我已经找到了https://github.com/kokke/

  • 问题内容: 我正在研究 文本加密和解密 项目(遵循Struts 2) 每当我输入密码和纯文本时,都会收到“无效的AES密钥长度”错误。 服务等级 这是错误 问题答案: 一般须知: 键!=密码 需要键,而不是密码。见下文 这可能是由于策略限制导致无法使用32个字节的密钥。看到其他答案 就你而言 问题是数字1:您要传递密码而不是密钥。 AES仅支持16、24或32字节的密钥大小。您要么需要提供准确的金

  • 问题内容: 我在解密以前在PHP应用程序中加密过的pgcrypto中的数据时遇到问题。 我尝试了3种加密类型: 1)mcrypt-RIJNDAEL 128 CBC 2)mcrypt-RIJNDAEL 256 CBC 3)openssl_encrypt-aes-256-cbc 一切都在PHP中很好地解密,但是在pgcrypto中,我只能使用相同的密钥和iv进行解密1)mcrypt-RIJNDAEL

  • 我从Python得到一个加密的base64字符串。 格式是AES 256 CBC,但当我尝试使用Android解密时,它将解密字符串返回为nil。 这里我使用https://github.com/fukata/aes-256-cbc-example

  • 我在pgcrypto中解密以前在PHP应用程序中加密的数据时遇到问题。 我尝试了3种类型的加密: 1)mcrypt-rijndael 128 cbc 2)mcrypt-rijndael 256 cbc 3)openssl_encrypt-aes-256-cbc 在PHP中,所有的东西都可以加密解密,但在pgcrypto中,我可以使用相同的密钥和iv解密,仅1)mcrypt-rijndael 128