来自安全哈希函数的无符号字符的 mod

发布于 2024-10-30 18:22:37 字数 535 浏览 6 评论 0原文

我有一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浪菊怪哟 2024-11-06 18:22:37

我建议使用 0x1ff 进行按位与操作,而不是使用 % 运算符。

I suggest doing a bit-wise and with 0x1ff instead of using the % operator.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文