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的模512得到。要採取test_SHA1的模512,我做
int x = (unsigned int)test_SHA1 % 512;
printf("x = %d\n", x);
但X原來是158而不是245
謝謝。我試過「test_SHA1 = test_SHA1&0x1ff;」但它給我一個編譯錯誤。你能否發佈命令做按位AND並將其轉換爲十進制。 – Romonov 2011-04-07 18:55:34
我剛剛意識到test_SHA1是一個數組(20循環,我假設你的循環)。假設它是一個char數組,你應該使用'(test_SHA1 [18]&1)+ test_SHA1 [19]'。或者,如果它是更寬的整數類型,則爲'test_SHA1 [19]&0x1ff'。這也解釋了前面的結果 - 你將一個數組指針(一個地址)投射到一個無符號的整數並取出地址的低9位。 – 2011-04-07 19:29:54
我的錯誤。我應該添加test_SHA1的聲明。我編輯帖子添加它。 – Romonov 2011-04-07 19:40:28