在学习OpenSSL的一些基础知识时,我遇到了create an SHA256 hash的代码:
$.get("viewData.php?action=getCat", function(json) {
if(json.catArr.length>0) {
$.each(json.catArr, function()
{
catArr.push(this.category);
});
$.each(catArr, function(index, el) {
console.log(el);
$("#category_selector").append($('<option>', {
value: el,
text : el
}));
});
}
}, 'json');
有人可以尽可能简单地解释 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();
}
在此具体示例中的作用,同时还能有效地解释它吗?
我似乎无法理解这些答案,但他们并没有帮助理解我的具体片段:
答案 0 :(得分:3)
在C ++中有许多不同的流。您可能知道cout
将输出写入控制台,cin
读取输入。 stringstream
是一个类,其对象写入string
个对象并从中读取。写入字符串流(如变量ss
)就像写入cout
一样,但写入字符串而不是控制台。
你说你有编程C吗?那么你应该知道十六进制表示法,对吧?这就是the hex
manipulator告诉流使用的内容。这类似于printf
格式说明符"%x"
。
The setw
manipulator设置下一个输出的字段宽度。
The setfill
manipulator设置输出的 fill 字符。
最后,将hash[i]
转换为int
是因为hash[i]
是char
,输出到流会将其写为字符而不是小整数。< / p>
简而言之,
ss << hex << setw(2) << setfill('0') << (int)hash[i];
相当于C代码
sprintf(temporaryBuffer, "%02x", hash[i]);
strcat(ss, temporaryBuffer);