学习OpenSSL的基础知识时,我遇到了创建SHA256哈希的代码:create an SHA256 hash。
这段代码的作用是将哈希值的十六进制表示转换成字符串。具体来说,它将哈希值的每个字节转换成两位的十六进制数,并将它们连接起来形成一个字符串。
更详细地说,代码中的“ss”是一个字符串流对象,“hex”是一个标志,指示后面的整数应以十六进制输出。“setw(2)”和“setfill('0')”是控制输出格式的函数,它们确保每个十六进制数都有两位,并在必要时用零填充。最后,“(int)hash[i]”将哈希值的第i个字节转换为整数,然后将其附加到字符串流中。
using namespace std;
#include <openssl/sha.h>
string sha256(const string str)
{
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, str.c_str(), str.size());
SHA256_Final(hash, &sha256);
stringstream ss;
for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
{
ss << hex << setw(2) << setfill('0') << (int)hash[i];
}
return ss.str();
}
这段代码的作用是将哈希值的十六进制表示转换成字符串。具体来说,它将哈希值的每个字节转换成两位的十六进制数,并将它们连接起来形成一个字符串。
更详细地说,代码中的“ss”是一个字符串流对象,“hex”是一个标志,指示后面的整数应以十六进制输出。“setw(2)”和“setfill('0')”是控制输出格式的函数,它们确保每个十六进制数都有两位,并在必要时用零填充。最后,“(int)hash[i]”将哈希值的第i个字节转换为整数,然后将其附加到字符串流中。
std::cout
时,你尝试过对它们进行实验吗? - undefinedcout
而不是ss
,看看结果如何。最重要的是要实践! :) - undefined