gpt4 book ai didi

c++ - 打印 : Displaying an SHA1 hash in hexadecimal

转载 作者:可可西里 更新时间:2023-11-01 11:35:45 26 4
gpt4 key购买 nike

我一直在关注显示如何使用 Windows CryptoAPI 散列数据的 msdn 示例。该示例可在此处找到:http://msdn.microsoft.com/en-us/library/windows/desktop/aa382380%28v=vs.85%29.aspx

我已修改代码以使用 SHA1 算法。

我不明白以十六进制显示哈希(如下所示)的代码是如何工作的,更具体地说,我不明白 >> 4 运算符和 & 0xf 运算符的作用。

if (CryptGetHashParam(hHash, HP_HASHVAL, rgbHash, &cbHash, 0)){
printf("MD5 hash of file %s is: ", filename);
for (DWORD i = 0; i < cbHash; i++)
{
printf("%c%c", rgbDigits[rgbHash[i] >> 4],
rgbDigits[rgbHash[i] & 0xf]);
}
printf("\n");
}

如果有人能为我解释一下,我将不胜感激,在此先感谢:)

最佳答案

x >> 4x 右移四位。 x & 0xfx0xf 之间执行按位 and。 0xf 设置了四个最低有效位,所有其他位都清除。

假设 rgbHash 是一个 unsigned char 数组,这意味着第一个表达式只保留四个最高有效位,第二个表达式保留(大概)8 位输入的四个最低有效位。

四位恰好适合一个十六进制数字,因此每个位都用于在数组中查找一个十六进制数字,大概看起来像这样:

char rgbDigits[] = "0123456789abcdef"; // or possibly upper-case letters

关于c++ - 打印 : Displaying an SHA1 hash in hexadecimal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11529744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com