1

ウィキペディアで 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 *)&h0; を変換する必要があります。それらのそれぞれを char[] に結合し、それらを連結します。つまり、MD5 コード全体を 1 つの char[] にまとめます。これは正しい/可能ですか?

私は昨日、これを見つけるために一日を費やしましたが、私が得た最高のものは、sprinft を使用して unit32_t を変換する方法であり、それは機能します。しかし、 unit8_t ではそうではありません。

4

1 に答える 1

2

各 8 ビット数値は で出力する必要があります%02x

  • 先行0は、数値が先行ゼロで表示されることを意味します
  • 2幅が2つの16進文字であることを意味します
  • 手段はx、数値を 16 進数で出力します。

したがって、最初のインスタンスは次のようになります。

p = (uint8_t *) &h0;
printf("%02x%02x%02x%02x", p[0], p[1], p[2], p[3]);
于 2013-03-14T12:19:26.557 に答える