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 
+1

智能感知不是编译器。编译器会给你一个错误吗? –

SecByteBlockSecBlock< 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 SVNclone from Git