SecByteBlock将不接受字符串作为自定义密钥
问题描述:
我想使用Crypto ++的自定义密钥。我的程序使用随机密钥,但当我尝试通过SecByteBlock
密钥时,出现intellisense错误。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
答
甲SecByteBlock
为SecBlock< T, A >
与T = byte
一个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
,所以你应该能够在您的项目。要使用清洁剂来源,您需要checkout from SVN或clone from Git。
智能感知不是编译器。编译器会给你一个错误吗? –