首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C++中计算字符串的MD5

在C++中计算字符串的MD5
EN

Stack Overflow用户
提问于 2015-07-02 00:00:13
回答 1查看 22.7K关注 0票数 21

我有一个很好的内存映射文件示例,它计算文件的MD5散列。这工作得很好,没有问题。

我想将其更改为计算字符串的MD5散列。

所以这个例子是:

(包含#include <openssl/md5.h>来运行这段代码,如果你想运行包含该文件的代码,还要包含boost内容)

代码语言:javascript
运行
复制
unsigned char result[MD5_DIGEST_LENGTH];
boost::iostreams::mapped_file_source src(path);
MD5((unsigned char*)src.data(), src.size(), result);

std::ostringstream sout;
sout<<std::hex<<std::setfill('0');
for(long long c: result)
{
    sout<<std::setw(2)<<(long long)c;
}
return sout.str();

我所做的更改是:

代码语言:javascript
运行
复制
std::string str("Hello");
unsigned char result[MD5_DIGEST_LENGTH];
MD5((unsigned char*)str.c_str(), str.size(), result);

std::ostringstream sout;
sout<<std::hex<<std::setfill('0');
for(long long c: result)
{
    sout<<std::setw(2)<<(long long)c;
}
return sout.str();

但这会产生这样的结果:

代码语言:javascript
运行
复制
8b1a9953c4611296a827abf8c47804d7

而命令$ md5sum <<< Hello给出的结果是:

代码语言:javascript
运行
复制
09f7e02f1290be211da707a266f153b3

为什么结果不一致呢?哪一个是错的?

谢谢。

编辑:

所以我得到了正确的答案,它在下面打勾。从终端调用md5sum的正确方法是:

代码语言:javascript
运行
复制
$ printf '%s' "Hello" | md5sum

以避免包含新行。

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

https://stackoverflow.com/questions/31166313

复制
相关文章

相似问题

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