如果我想使用 Crypto++ 库加密数据并使用小于 32 字节的用户定义密码怎么办?
现在我有以下代码:
byte passwordBytes[AES::MAX_KEYLENGTH];
byte ivBytes[AES::BLOCKSIZE];
std::string textToEncrypt("encryptMe");
std::string aesKey("passwordFromUser");
std::string ivText("Iv16BytesOfText...");
memset(passwordBytes, 0, sizeof(passwordBytes)); //fill with zeroes first
memcpy(passwordBytes, aesKey.data(), aesKey.size()); //fill with key data
memcpy(ivBytes, ivText.data(), CryptoPP::AES::BLOCKSIZE); //fill iv bytes
CTR_Mode<AES>::Encryption encryption;
encryption.SetKeyWithIV(passwordBytes, sizeof(passwordBytes), ivBytes);
StringSource encryptor(textToEncrypt, true,
new StreamTransformationFilter(encryption,
new StringSink(verschluesselterText)
,StreamTransformationFilter::NO_PADDING
)
);
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,aesKey小于 32 字节。
要将完整的 32 字节应用于加密函数,我只需用零填充未使用的空间,但这对我来说似乎不是最好的解决方案。
我是否遗漏了有关创建 AES 密钥的信息?使用用户定义的密码?
我的第二个问题,如果用户选择的密码长于 32 字节怎么办?就我而言,密码会被截断,这对我来说听起来不太正确。
感谢您的帮助!