MD5(libcrypto)是否可以处理中间包含null的字符串?

时间:2012-09-28 07:19:09

标签: c encryption md5

我有两个字符串如下 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是相同还是不同????

由于

3 个答案:

答案 0 :(得分:3)

这一切都取决于您为n参数传递的值。

如果您使用strlen()来计算n,那么MD5()函数将处理数据,但不包括null(因为您告诉它实际上)。

如果传入n的正确长度(我假设7Str1),则MD5()将包含散列中的所有数据,包括null字节和数据超过null。

Str1Str2的哈希值会有所不同(假设您为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