C++ 塞比特布洛克赢得';不接受字符串作为自定义键

C++ 塞比特布洛克赢得';不接受字符串作为自定义键,c++,aes,crypto++,C++,Aes,Crypto++,我正在尝试使用Crypto++的自定义密钥。我的程序使用一个随机密钥,但当我试图传递SecByteBlock密钥时,我遇到了一个intellisense错误 参考文件将其定义为SecBlock(const T*T,size\u type len),但我以前从未遇到过const T void EncryptFile(string cEncryptionKey, string cFilePath, string cTempFilepath) SecByteBlock key_aes(pEnc

我正在尝试使用Crypto++的自定义密钥。我的程序使用一个随机密钥,但当我试图传递
SecByteBlock
密钥时,我遇到了一个intellisense错误

参考文件将其定义为
SecBlock(const T*T,size\u 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
是带有
T=byte
的类型定义。三名施工人员是:

SecBlock (size_type size=0)
SecBlock (const SecBlock< T, A > &t)
SecBlock (const T *t, size_type len)
因此,您只需:

ASSERT(key.size() == AES::DEFAULT_KEYLENGTH);
SecByteBlock key_aes(reinterpret_cast<const byte*>(key.data()), key.size());
ASSERT(key.size();
SecByteBlock key_aes(reinterpret_cast(key.data()),key.size());
您可能需要执行
静态\u转换(AES::DEFAULT\u KEYLENGTH)
,但通常不必执行。如果您使用
-Wextra
-Wsign conversion
-Wconversion
,则可能需要


回到10000英尺,您可能应该避免首先将键放入
字符串中

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



与此相关的是,我们正在使用
-Wall
获得一个干净的编译,因此您可能应该在您的项目中启用它。要使用更干净的源代码,您需要或。

Intellisense不是编译器。编译器会给你一个错误吗?
ASSERT(key.size() == AES::DEFAULT_KEYLENGTH);
SecByteBlock key_aes(reinterpret_cast<const byte*>(key.data()), key.size());