首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MD5( libcrypto )能处理中间包含null的字符串吗?

MD5( libcrypto )能处理中间包含null的字符串吗?
EN

Stack Overflow用户
提问于 2012-09-28 15:19:09
回答 3查看 912关注 0票数 0

我有两个字符串,如下所示Str1: 1234\099 Str2: 123499

如果我使用unsigned char * MD5 (const unsigned char *d,unsigned long n,unsigned char *md)计算这些字符串的MD5;

函数MD5会计算Str1的前4个字节的哈希值,还是会得到完整的字符串“1234099”。

Str1和Str2的MD5是相同还是不同?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-28 15:43:56

是的,迈克尔是对的。我执行了下面的程序,似乎无论字符串中是什么,MD5计算都会在第二个参数上进行。

代码语言:javascript
复制
#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

票数 0
EN

Stack Overflow用户

发布于 2012-09-28 15:28:55

这完全取决于您为n参数传递的值。

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

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

Str1Str2的散列将会不同(假设您为n传入了大于3的值)。

票数 3
EN

Stack Overflow用户

发布于 2012-09-28 15:26:48

const unsigned char *d它是数组的第一个元素,而不是C样式的字符串。

因此指定适当长度(7个元素)的(const unsigned char *)"1234\099",您将获得它的MD5到md中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12635381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档