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

时间:2015-07-10 19:34:34

标签: c++ aes crypto++

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

引用here将其定义为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

1 个答案:

答案 0 :(得分:2)

SecByteBlock是具有T = byte的{​​{3}}的typedef。三个构造函数是:

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开头。

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

相关的,我们只是在用-Wall进行干净编译时,所以你应该在你的项目中启用它。要使用清洁源,您需要SecBlock< T, A >checkout from SVN