我正在尝试使用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
答案 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。