SecByteBlock 不接受字符串作为自定义密钥
SecByteBlock won't accept string as custom key
我正在尝试使用自定义密钥与crypto++。我的程序使用随机密钥,但是当我试图传递SecByteBlock
密钥时,我得到一个智能感知错误。
这里的引用将其定义为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
A SecByteBlock
是SecBlock< T, A >
与T = byte
的类型定义。这三个构造函数是:
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
开始。
创建一个具有size的SecByteBlock
(上面的第一个构造函数),并直接读入它。然后,将SecByteBlock
通过引用传递给EncryptFile
。
相关的,我们刚刚得到一个干净的-Wall
编译点,所以你应该在你的项目中启用它。要使用更干净的源代码,您需要从SVN签出或从Git克隆。
相关文章:
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- C++自定义比较函数
- 如何比较自定义类的std::变体
- 允许从 std::map 的密钥窃取资源?
- std::设置自定义比较器
- 如何正确实现和访问运算符的各种自定义枚举器
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 自定义先决条件对移动分配运算符有效吗
- 使用VS Code和CMake Tools运行自定义命令
- 我可以对 std::array 使用自定义分配器来获取安全加密密钥吗?
- 如何使用openssl续订过期的证书密钥或创建自签名证书密钥any.pem Poco c ++
- std::map :使用自定义运算符时更新密钥
- 如何以自定义类/比较器作为密钥创建地图
- 如何使用用户定义的密码初始化AES-256密钥
- 自定义iojs加载项无法加载RSA私钥
- 如何在HMAC-SHA1 Crypto++实现中使用自定义密钥
- 具有自定义密钥类型的STL无序映射
- SecByteBlock 不接受字符串作为自定义密钥