作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在尝试将 SecByteBlock
转换为字符串时遇到问题。这是我的案例:
我想使用带有静态 key 和动态 iv 的 AES 加密用户访问数据。我的代码是这样的:
AesKeyIvFactory aesKeyIvFactory;
SecByteBlock key = aesKeyIvFactory.loadKey();
SecByteBlock iv = aesKeyIvFactory.createIv();
encryptionService->encode(&userAccess, key, iv);
std::string token = std::string(iv.begin(), iv.end()) + userAccess;
上面的代码应该:
从文件中加载 key ;
创建 iv;
加密 (AES) 用户访问数据;
将 iv 与加密的用户数据访问连接起来以创建“ token ”;
多次运行测试,有时(1 到 10 次)std::string(iv.begin(), iv.end())
无法正常工作。似乎在 iv 中有一个“换行符”导致转换失败。
我尝试了很多东西,但没有任何效果,而且我没有使用 C++ 的经验。
我希望有人能帮助我。
最佳答案
I'm having a problem trying to convert SecByteBlock to string
如果问题来自 SecByteBlock
的转换及其 byte
数组到 std::string
及其 char
数组,那么你应该:
SecByteBlock iv;
...
// C-style cast
std::string token = std::string((const char*)iv.data(), iv.size()) + userAccess;
或者,
SecByteBlock iv;
...
// C++-style cast
std::string token = std::string(reinterpret_cast<const char*>(iv.data()), iv.size()) + userAccess;
你也可以放弃赋值,只初始化然后追加:
SecByteBlock iv;
...
std::string token(reinterpret_cast<const char*>(iv.data()), iv.size());
...
std::string userAccess;
...
token += userAccess;
您可能遇到的另一个问题是 string
至 SecByteBlock
.你应该这样做:
std::string str;
...
// C-style cast
SecByteBlock sbb((const byte*)str.data(), str.size());
或者:
std::string str;
...
// C++-style cast
SecByteBlock sbb(reinterpret_cast<const byte*>(str.data()), str.size());
关于c++ - 如何将 SecByteBlock 转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31929531/
我是一名优秀的程序员,十分优秀!