【问题标题】:MD5 mismatch between openssl and linux bash calculationopenssl和linux bash计算之间的MD5不匹配
【发布时间】:2015-03-25 22:42:02
【问题描述】:

我在网上找到了这个计算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  -

这种差异从何而来?

【问题讨论】:

  • bash, md5sum behaves strange 的可能重复项
  • 试试这个:把char data[1024]改成std::string data,去掉memset(),把std::cin&gt;&gt;data改成std::getline(std::cin, data),把getMd5Hash((unsigned char *)data, strlen(data), &amp;mdLen)改成getMd5Hash((unsigned char *) data.c_str(), data.length(), &amp;mdLen)
  • @RemyLebeau 我在 C 中得到它,并很快就转换为 C++。我同意你的观点。

标签: c++ openssl md5 md5sum evp-cipher


【解决方案1】:

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

$ echo -e "aaa" | md5sum 
5c9597f3c8245907ea71a89d9d39d08e  -
$ echo -n "aaa" | md5sum 
47bce5c74f589f4867dbd57e9ca9f808  -

【讨论】:

  • 是的,就是这样。现在两者都是一样的。但是为什么我在文件中保存数据时没有看到新行:echo "aaa"&gt;data 并通过 gedit 打开?
  • 按照惯例,UNIX 中的文本文件应该有一个尾随换行符。它不会导致出现额外的空白行。相反,编辑器可能会指出尾随换行符是否缺失(例如,vim 的“noeol”状态标记)。
  • @ar2015 ls -l data 显示了什么?是三个字节还是更多?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-03
  • 2013-12-31
相关资源
最近更新 更多