【发布时间】:2021-03-11 20:21:22
【问题描述】:
我正在尝试通过字符串流提取十六进制的哈希摘要,但在迭代数据时无法使其工作。
使用std::hex,我可以使用普通整数文字轻松做到这一点,如下所示:
#include <sstream>
#include <iostream>
std::stringstream my_stream;
my_stream << std::hex;
my_stream << 100;
std::cout << my_stream.str() << std::endl; // Prints "64"
但是,当我尝试从摘要中推送数据时,它只是将数据解释为字符并将它们推送到字符串流中。这是函数:
#include <sstream>
#include <sha.h> // Crypto++ library required
std::string hash_string(const std::string& message) {
using namespace CryptoPP;
std::stringstream buffer;
byte digest[SHA256::DIGESTSIZE]; // 32 bytes or 256 bits
static SHA256 local_hash;
local_hash.CalculateDigest(digest, reinterpret_cast<byte*>(
const_cast<char*>(message.data())),
message.length());
// PROBLEMATIC PART
buffer << std::hex;
for (size_t i = 0; i < SHA256::DIGESTSIZE; i++) {
buffer << *(digest+i);
}
return buffer.str();
}
byte 类型只是 unsigned char 的 typedef,所以我不明白为什么它不能正确输入。使用std::cout 打印返回值会给正常字符解释带来 ASCI 混乱。为什么它在第一种情况下有效,而在第二种情况下无效?
例子:
std::string my_hash = hash_string("hello");
std::cout << hash << std::endl; // Prints: ",≥M║_░ú♫&Φ;*┼╣Γ₧←▬▲\▼ºB^s♦3bôïÿ$"
【问题讨论】:
-
>> std::hex >> data也许? -
我试过了,但都不管用。
标签: c++ char stringstream crypto++ iomanip