来自安全哈希函数的无符号字符的 mod
我有一个 20 字节的无符号字符 test_SHA1[20],它是哈希函数的返回值。使用以下代码,我得到这个输出
unsigned char test_SHA1[20];
char hex_output[41];
for(int di = 0; di < 20; di++)
{
sprintf(hex_output + di*2, "%02x", test_SHA1[di]);
}
printf("SHA1 = %s\n", hex_output);
50b9e78177f37e3c747f67abcc8af36a44f218f5
这个数字的最后 9 位是 0x0f5(= 十进制的 245),我可以通过 test_SHA1 的 mod 512 得到它。为了取 test_SHA1 的 mod 512,我这样做了
int x = (unsigned int)test_SHA1 % 512;
printf("x = %d\n", x);
,但是 x 结果是 158 而不是 245。
i have an unsigned char test_SHA1[20] of 20 bytes which is a return value from a hash function. With the following code, I get this output
unsigned char test_SHA1[20];
char hex_output[41];
for(int di = 0; di < 20; di++)
{
sprintf(hex_output + di*2, "%02x", test_SHA1[di]);
}
printf("SHA1 = %s\n", hex_output);
50b9e78177f37e3c747f67abcc8af36a44f218f5
The last 9 bits of this number is 0x0f5 (= 245 in decimal) which I would get by taking a mod 512 of test_SHA1. To take mod 512 of test_SHA1, I do
int x = (unsigned int)test_SHA1 % 512;
printf("x = %d\n", x);
But x turns out to be 158 instead of 245.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我建议使用 0x1ff 进行按位与操作,而不是使用
%
运算符。I suggest doing a bit-wise and with 0x1ff instead of using the
%
operator.