博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在C++中使用Libmd5计算字符串或文件的MD5值
阅读量:5896 次
发布时间:2019-06-19

本文共 2870 字,大约阅读时间需要 9 分钟。

CppMD5Demo.cpp

#include 
#include
#include
#include "MessageDigest5.h"#define INPUT_BUFFER_SIZE 1024int main(int argc, const char **argv){ if (argc < 3) std::cout << "Usage: CppMD5Demo [options]
\nOptions:\n -string
\n -file
" << std::endl; else { if (!std::strcmp(argv[1], "-string")) { const std::chrono::system_clock::time_point &startTime = std::chrono::system_clock::now(); MessageDigest5 md5; md5.appendData(argv[2], std::strlen(argv[2])); const std::string &md5String = md5.result(); const std::chrono::system_clock::time_point &endTime = std::chrono::system_clock::now(); const std::chrono::duration
> &elapseTime = endTime - startTime; std::cout << "MD5 hashed: " << md5String << ", elapsed time: " << elapseTime.count() << " seconds." << std::endl; } else if (!std::strcmp(argv[1], "-file")) { std::ifstream ifs(argv[2], std::ifstream::binary); if (ifs.is_open()) { std::cout << "MD5 hashing..." << std::endl; const std::chrono::system_clock::time_point &startTime = std::chrono::system_clock::now(); MessageDigest5 md5; char buffer[INPUT_BUFFER_SIZE]; while (!ifs.eof()) { std::streamsize numberOfCharacters = ifs.read(buffer, INPUT_BUFFER_SIZE).gcount(); md5.appendData(buffer, numberOfCharacters); } const std::string &md5String = md5.result(); const std::chrono::system_clock::time_point &endTime = std::chrono::system_clock::now(); const std::chrono::duration
> &elapsedTime = endTime - startTime; std::cout << "MD5 hashed: " << md5String << ", elapsed time: " << elapsedTime.count() << " seconds." << std::endl; } else std::cout << "Cannot open file: " << argv[2] << std::endl; } else std::cout << "Usage: CppMD5Demo [options]
\nOptions:\n -string
\n -file
" << std::endl; } return 0;}

 

MessageDigest5.h

#pragma once#include 
#include "libmd5/md5.h"class MessageDigest5{public: MessageDigest5(); void appendData(const char *data, size_t dataSize); std::string result();private: md5_state_t md5State;};

 

MessageDigest5.cpp

#include "MessageDigest5.h"MessageDigest5::MessageDigest5(){    md5_init(&md5State);}void MessageDigest5::appendData(const char *data, size_t dataSize){    md5_append(&md5State, reinterpret_cast
(data), dataSize);}std::string MessageDigest5::result(){ unsigned char digest[16]; md5_finish(&md5State, digest); std::string md5String; char hexBuffer[3]; for (size_t i = 0; i != 16; ++i) { if (digest[i] < 16) sprintf(hexBuffer, "0%x", digest[i]); else sprintf(hexBuffer, "%x", digest[i]); md5String.append(hexBuffer); } return md5String;}

 

关于libmd5,可参考

转载于:https://www.cnblogs.com/buyishi/p/9100257.html

你可能感兴趣的文章
清理恢复文本框的默认值
查看>>
【原创】如何在vim中使用tab进行python代码补全
查看>>
Struts秘籍之起式:第1.3式:迁移至Struts 1.1
查看>>
绿色PLSQL/Developer搭配Oracle精简客户端使用
查看>>
ViewPager Banner(广告墙)
查看>>
Spring Cloud 入门教程(二): 服务消费者(rest+ribbon)(Greenwich.RELEASE)
查看>>
iOS开发20:Navigation Bar的简单设置
查看>>
iOS开发24:使用SQLite3存储和读取数据
查看>>
GMF树形布局 2 实现展开/折叠
查看>>
Cocos2dx 2.0x Touch事件
查看>>
php判断是否登录
查看>>
Yii2 Unable to verify your data submission 错误-CSRF
查看>>
angularjs-paste-upload
查看>>
hadoop学习笔记
查看>>
解除 Linux 系统的最大进程数和最大文件打开数限制
查看>>
在 Linux 中删除超大文件的技巧
查看>>
Java类的修饰符判断:java.lang.reflect.Modifier
查看>>
使用优盘或者移动硬盘安装Ubuntu
查看>>
electron-创建一个hello world应用
查看>>
RXjs相关
查看>>