c++ - 如何将 std::string 键值分配给 SecByteBlock
问题描述
我正在使用 crypto++ AES 进行加密和解密。
出于某种原因,我将密钥作为字符串类型存储在数据库中。
如何将此密钥分配给 AES SecByteBlock 密钥或使用此值而不是一些随机生成的块来初始化 AES 密钥。
std::string key_fromDB = "12dfre314?//1afsfa";
AutoSeededRandomPool prng;
byte iv[ AES::BLOCKSIZE ];
prng.GenerateBlock( iv, sizeof(iv) );
SecByteBlock temp_key(AES::DEFAULT_KEYLENGTH);
prng.GenerateBlock( temp_key, temp_key.size() );
try
{
CBC_Mode< AES >::Decryption d;
d.SetKeyWithIV(temp_key , temp_key.size(), iv );
// The StreamTransformationFilter removes
// padding as required.
StringSource ss( cipher, true,
new StreamTransformationFilter( d,
new StringSink( recovered )
) // StreamTransformationFilter
); // StringSource
std::cout << "recovered text: " << recovered << std::endl;
}
catch ( const CryptoPP::Exception& e)
{
std::cerr << e.what() << std::endl;
}
解决方案
推荐阅读
- hibernate - 如何将 Hibernate 从 4.3 升级到 5.2 以迁移到 JDK 10?
- javascript - 如何将 id 从 html 标签列表传递给 jQuery
- java - Google OR-Tools:无法运行 java 示例 java.lang.UnsatisfiedLinkError:java.library.path 中没有 jniortools
- c - 父进程如何等待所有子进程终止
- mysql - 如何在 Mysql Workbench 中运行脚本?
- ios - 与 AUTH0 iOS 的通用链接
- python - 如何将这个复杂的 SQL 转换为 Django 模型查询?
- ios - 如何避免swift 3中的错误无效重新声明?
- puppeteer - 可以使用 puppeteer 预渲染 SPA 吗?
- wordpress - WordPress 音频播放器在不同的浏览器上有所不同