我有两个字符串如下 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是相同还是不同????
由于
答案 0 :(得分:3)
这一切都取决于您为n
参数传递的值。
如果您使用strlen()
来计算n
,那么MD5()
函数将处理数据,但不包括null(因为您告诉它实际上)。
如果传入n
的正确长度(我假设7
为Str1
),则MD5()
将包含散列中的所有数据,包括null字节和数据超过null。
Str1
和Str2
的哈希值会有所不同(假设您为n
传入大于3的内容)。
答案 1 :(得分:0)
const unsigned char *d
它是数组的第一个元素,而不是C风格的字符串。
因此,指定(const unsigned char *)"1234\099"
的正确长度(7个元素),您将获得其MD5到md
。
答案 2 :(得分:0)
是的,迈克尔是对的。我执行了下面的程序,似乎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字节哈希ffffffc9
对于4个字节的哈希ffffffe5
对于3个字节的哈希ffffff90