0

我在网上找到了这段代码来计算 md5:

#include<openssl/evp.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>

unsigned char *getMd5Hash(unsigned char *data, size_t dataLen, int *mdLen)
{
    unsigned char *md = NULL;
    EVP_MD_CTX *ctx = NULL;
    const EVP_MD *mdType = EVP_md5();
    *mdLen = EVP_MD_size(mdType);
    md = (unsigned char *) malloc(*mdLen);
    ctx = EVP_MD_CTX_create();
    EVP_MD_CTX_init(ctx);
    EVP_DigestInit_ex(ctx, mdType, NULL);
    EVP_DigestUpdate(ctx, data, dataLen);
    EVP_DigestFinal_ex(ctx, md, NULL);
    EVP_MD_CTX_cleanup(ctx);
    EVP_MD_CTX_destroy(ctx);
    return md;
}


int main()
{
    char data[1024];
    unsigned char *md;
    int i = 0, mdLen = 0;
    memset(&data, 0, 1024);
    std::cout<<"Enter string: ";
    std::cin>>data;
    md = getMd5Hash((unsigned char *)data, strlen(data), &mdLen);
    for(i = 0; i < mdLen; i++) {
        printf("%02x",md[i]);
    } printf("\n");
    return 0;
}

我建造了它。

g++ aaa.cpp -lcrypto

但是,这段代码的结果与Linux bash的md5sum结果不同:

$ ./a.out
Enter string: aaa
47bce5c74f589f4867dbd57e9ca9f808

$ echo -e "aaa"|md5sum
5c9597f3c8245907ea71a89d9d39d08e  -

这种差异从何而来?

4

1 回答 1

2

试试echo -n。您还散列了行尾标记。

$ echo -e "aaa" | md5sum 
5c9597f3c8245907ea71a89d9d39d08e  -
$ echo -n "aaa" | md5sum 
47bce5c74f589f4867dbd57e9ca9f808  -
于 2015-03-25T22:43:44.803 回答