【发布时间】:2012-03-08 20:35:27
【问题描述】:
我正在使用以下代码为字符串生成 MD5 哈希。以十六进制打印的值似乎是正确的(我在网站上验证了相同的字符串)。但是,当我将值打印为整数时,它有 36 位数字。我的理解是它应该有 16 位数字,因为生成的哈希是 128 位长。
我想知道应该如何从 unsigned char 转换为 int 以及如何将其存储在变量中,以便最终将其打印到文件中。
如果有人能解释这些值是如何存储在 unsigned char 中的,例如表示十六进制和十进制的一位数字需要多少位以及如何在它们之间进行转换,那就太好了。我尝试了 sscanf 和 strtol 但我想我没有正确使用它们。
int main (void)
{
char *str = "tell";
u_int8_t *output; //unsigned char
output = malloc(16 * sizeof(char));
int i = 0;
MD5_CTX ctx;
MD5Init(&ctx);
MD5Update(&ctx, str, strlen(str));
MD5Final(output, &ctx);
while(i < 16)
printf("%x",output[i++]);
printf("\n");
i = 0;
while(i < 16)
printf("%i",output[i++]);
printf("\n");
}
这里的输出是
fe17ec3c451f132ef82a3a54e84a461e
254232366069311946248425884232747030
【问题讨论】:
-
但不要尝试以十进制形式存储像这样的十六进制值。