SecByteBlock 不接受字符串作为自定义密钥

SecByteBlock won't accept string as custom key

本文关键字:自定义 密钥 不接受 字符串 SecByteBlock      更新时间:2023-10-16

我正在尝试使用自定义密钥与crypto++。我的程序使用随机密钥,但是当我试图传递SecByteBlock密钥时,我得到一个智能感知错误。

这里的引用将其定义为SecBlock (const T *t, size_type len),但我以前从未遇到过const T。

void EncryptFile(string cEncryptionKey, string cFilePath, string cTempFilepath)
    SecByteBlock key_aes(pEncryptionKey, AES::DEFAULT_KEYLENGTH);//giving error
    //SecByteBlock key_aes(ES::DEFAULT_KEYLENGTH); // Generates a random key

A SecByteBlockSecBlock< T, A >T = byte的类型定义。这三个构造函数是:

SecBlock (size_type size=0)
SecBlock (const SecBlock< T, A > &t)
SecBlock (const T *t, size_type len)

没有要使用的构造函数。这个不存在:

SecByteBlock (const string& str, size_type size)

所以你只需要:

ASSERT(key.size() == AES::DEFAULT_KEYLENGTH);
SecByteBlock key_aes(reinterpret_cast<const byte*>(key.data()), key.size());

您可能需要执行static_cast<size_t>(AES::DEFAULT_KEYLENGTH),但通常不必这样做。如果您使用-Wextra, -Wsign-conversion-Wconversion,您可能必须。


回到10,000英尺,你可能应该避免把钥匙放在string开始。

创建一个具有size的SecByteBlock(上面的第一个构造函数),并直接读入它。然后,将SecByteBlock通过引用传递给EncryptFile


相关的,我们刚刚得到一个干净的-Wall编译点,所以你应该在你的项目中启用它。要使用更干净的源代码,您需要从SVN签出或从Git克隆。