小编Mar*_*T85的帖子

如何使用用户定义的密码初始化 AES-256 密钥

如果我想使用 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 字节怎么办?就我而言,密码会被截断,这对我来说听起来不太正确。

感谢您的帮助!

c++ encryption aes crypto++

3
推荐指数
1
解决办法
4426
查看次数

标签 统计

aes ×1

c++ ×1

crypto++ ×1

encryption ×1