0

私は以下のように2つの文字列を持っていますStr1:1234 \ 099 Str2:123499

unsigned char * MD5(const unsigned char * d、unsigned long n、unsigned char * md);を使用してこれらの文字列のMD5を計算するとします。

関数MD5は、Str1の最初の4バイトのハッシュを計算しますか、それとも完全な文字列「1234\099」を取りますか。

Str1とStr2のMD5は同じですか、それとも異なりますか????

ありがとう

4

3 に答える 3

3

それはすべて、nパラメータに渡す値によって異なります。

strlen()を計算するために使用する場合nMD5()関数はnullまでのデータを処理しますが、nullは含まれません(実際には、nullを指示したため)。

の正しい長さを渡すとn(私はそれがの7ためだと思いますStr1)、MD5()nullバイトとnullを超えるデータを含むすべてのデータをハッシュに含めます。

Str1とのハッシュはStr2異なります(3より大きいものを渡したと仮定しますn)。

于 2012-09-28T07:28:55.470 に答える
0

const unsigned char *dこれは配列の最初の要素であり、Cスタイルの文字列ではありません。

したがって、適切な長さ(7要素)を指定する(const unsigned char *)"1234\099"と、MD5がに取得されmdます。

于 2012-09-28T07:26:48.470 に答える
0

はい、マイケルは正しいです。以下のプログラムを実行しましたが、文字列の内容に関係なく、2番目の引数でMD5の計算が行われているようです。

#include <stdio.h>
#include <openssl/md5.h>

int main() { <br>
    char *p = NULL;<br>
    char *c = NULL;<br>
    char *q = NULL;<br>

    p = malloc(10*(sizeof(char)));
    strncpy(p, "ABCDEDFGO", 9);
    c = malloc(200*(sizeof(char)));
    memset(c,0, 200);

    p[3] = '\0';

    q = MD5(p, 9, c);
    printf("\n For 9 bytes hash %x", *c);
    q = MD5(p, 4, c);
    printf("\n For 4 bytes hash %x", *c);
    q = MD5(p, 3, c);
    printf("\n For 3 bytes hash %x", *c);

    free(c);
    return (0);
}

9バイトのハッシュの場合ffffffc94
バイトのハッシュの場合ffffffe53
バイトのハッシュの場合ffffff90

于 2012-09-28T07:43:56.227 に答える