MD5将uint8_t转换为字符串

时间:2013-03-14 12:12:36

标签: c md5

我在维基百科上使用Md5 C代码

int main(int argc, char **argv) {

if (argc < 2) {
    printf("usage: %s 'string'\n", argv[0]);
    return 1;
}

char *msg = argv[1];
size_t len = strlen(msg);

// benchmark
int i;
for (i = 0; i < 1000000; i++) {
    md5(msg, len);
}

//var char digest[16] := h0 append h1 append h2 append h3 //(Output is in little-endian)
uint8_t *p;

// display result

p=(uint8_t *)&h0;
printf("%2.2x%2.2x%2.2x%2.2x", p[0], p[1], p[2], p[3], h0);

p=(uint8_t *)&h1;
printf("%2.2x%2.2x%2.2x%2.2x", p[0], p[1], p[2], p[3], h1);

p=(uint8_t *)&h2;
printf("%2.2x%2.2x%2.2x%2.2x", p[0], p[1], p[2], p[3], h2);

p=(uint8_t *)&h3;
printf("%2.2x%2.2x%2.2x%2.2x", p[0], p[1], p[2], p[3], h3);
puts("");

return 0;

}

这就是代码。我已经知道它是如何工作的,我需要将MD5的结果转换为字符串。 这可能吗?

基本上我需要转换p =(uint8_t *)&amp; h0;将它们中的每一个转换为char []并将它们连接起来,换句话说,将整个MD5代码放在一个char []中。这是正确/可能吗?

我花了一整天的时间来寻找这个,我得到的最好的是如何使用sprinft转换unit32_t,它确实有效。但对于unit8_t它没有。

1 个答案:

答案 0 :(得分:2)

每个8位数字都应打印%02x

  • 前导0表示该号码将以前导零显示
  • 2表示宽度为两个十六进制字符
  • x表示以十六进制格式打印数字。

所以第一个例子是:

p = (uint8_t *) &h0;
printf("%02x%02x%02x%02x", p[0], p[1], p[2], p[3]);