CppMD5Demo.cpp

#include <iostream>
#include <fstream>
#include <chrono>
#include "MessageDigest5.h"
#define INPUT_BUFFER_SIZE 1024
int main(int argc, const char **argv)
{
if (argc < )
std::cout << "Usage: CppMD5Demo [options] <param>\nOptions:\n -string <string>\n -file <filename>" << std::endl;
else
{
if (!std::strcmp(argv[], "-string"))
{
const std::chrono::system_clock::time_point &startTime = std::chrono::system_clock::now();
MessageDigest5 md5;
md5.appendData(argv[], std::strlen(argv[]));
const std::string &md5String = md5.result();
const std::chrono::system_clock::time_point &endTime = std::chrono::system_clock::now();
const std::chrono::duration<float, std::ratio<, >> &elapseTime = endTime - startTime;
std::cout << "MD5 hashed: " << md5String << ", elapsed time: " << elapseTime.count() << " seconds." << std::endl;
}
else if (!std::strcmp(argv[], "-file"))
{
std::ifstream ifs(argv[], 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<float, std::ratio<, >> &elapsedTime = endTime - startTime;
std::cout << "MD5 hashed: " << md5String << ", elapsed time: " << elapsedTime.count() << " seconds." << std::endl;
}
else
std::cout << "Cannot open file: " << argv[] << std::endl;
}
else
std::cout << "Usage: CppMD5Demo [options] <param>\nOptions:\n -string <string>\n -file <filename>" << std::endl;
}
return ;
}

MessageDigest5.h

#pragma once
#include <string>
#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<const md5_byte_t *>(data), dataSize);
}
std::string MessageDigest5::result()
{
unsigned char digest[];
md5_finish(&md5State, digest);
std::string md5String;
char hexBuffer[];
for (size_t i = ; i != ; ++i)
{
if (digest[i] < )
sprintf(hexBuffer, "0%x", digest[i]);
else
sprintf(hexBuffer, "%x", digest[i]);
md5String.append(hexBuffer);
}
return md5String;
}

关于libmd5,可参考使用C语言获取字符串或文件的MD5值

在C++中使用Libmd5计算字符串或文件的MD5值的更多相关文章

  1. 计算字符串和文件的MD5值

    //计算字符串的MD5值 public string GetMD5(string sDataIn) { MD5CryptoServiceProvider md5 = new MD5CryptoServ ...

  2. c# 计算字符串和文件的MD5值的方法

    快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中.   <HTML开发Mac OS App 视频教程> 土豆网同步更新:http: ...

  3. 我的Java开发学习之旅------>工具类:Java获取字符串和文件进行MD5值

    ps:这几天本人用百度云盘秒传了几部大片到云盘上,几个G的文件瞬秒竟然显示"上传成功"!这真让我目瞪口呆,要是这样的话,那得多快的网速,这绝对是不可能的,也许这仅是个假象.百度了一 ...

  4. 使用C语言获取字符串或文件的MD5值

    libmd5地址:https://sourceforge.net/projects/libmd5-rfc/ MD5Demo1.c #include <stdio.h> #include & ...

  5. 在.NET中计算文件的MD5值

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月2日. 直接上代码吧: using System; using System.IO; using System.Security. ...

  6. C#计算文件的MD5值实例

    C#计算文件的MD5值实例 MD5 是 Message Digest Algorithm 5(信息摘要算法)的缩写,MD5 一种散列(Hash)技术,广泛用于加密.解密.数据签名和数据完整性校验等方面 ...

  7. python计算文件的md5值

    前言 最近要开发一个基于python的合并文件夹/目录的程序,本来的想法是基于修改时间的比较,即判断文件有没有改变,比较两个文件的修改时间即可.这个想法在windows的pc端下测试没有问题. 但是当 ...

  8. 使用python求字符串或文件的MD5

    使用python求字符串或文件的MD5 五月 21st, 2008 #以下可在python3000运行. #字符串md5,用你的字符串代替'字符串'中的内容. import hashlib md5=h ...

  9. c#计算文件的MD5值

    代码: /// <summary> /// 计算文件的 MD5 值 /// </summary> /// <param name="fileName" ...

随机推荐

  1. tarjan 缩点 求 scc

    算法学自 BYVoid https://www.byvoid.com/zhs/blog/scc-tarjan/ 这个写得很清楚了 当然 你可能不这么认为 而且 如果是让我 一开始就从这个博客 学 ta ...

  2. N*N数码问题

    奇数码问题 时间限制: 1 Sec  内存限制: 128 MB 题目描述 你一定玩过八数码游戏,它实际上是在一个3*3的网格中进行的,1个空格和1~8这8个数字恰好不重不漏地分布在这3*3的网格中. ...

  3. ftrace用法

    ftrace官方文档在kernel/Documentation/trace/ftrace.txt文件中. 使用ftrace接口之前,如果系统没有自动挂载debugfs文件系统,则要先手动挂载. # m ...

  4. 实验三:分别用for,while和do-while循环语句以及递归方法计算n!,并输出算式

    1.for循环语句计算n! 2.while循环语句计算n! 3.do-while语句计算n! 4.递归方法计算n! 5.心得:在此次实验中不知道如何从键盘进行输入,通过百度后找到一种容易理解的输入方法 ...

  5. 还在为不停build 烦恼么?看这里~~

    如果你是一名开发者,还在为偶尔改一个坐标或者颜色值 就要重新build 好久,然后如果层次深 还要一步步进去看效果么?下面 为大家介绍一个很好的开源库  DYCI  他的github地址,首先下载到本 ...

  6. Nuxt.js使用mint-ui

    环境 vue nuxt 要使用mint-ui 记录下其中的坑 npm install mint-ui --save plugins目录下 增加 mint-ui.js 代码: import Vue fr ...

  7. CentOS下常用的 19 条命令

    玩过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,因为我们只需要掌握我们最常用的命令就可以了.当然你也可以在使用时去找一下 ...

  8. IDEA中Thrift插件配置

    方法一:直接在IDEA界面中配置 打开IDEA的插件中心,搜索 Thrift 即可安装 方法二:手动下载Thrift插件安装 有时像在IDEA中安装Lombok插件一样,有时由于网络原因,方法一不奏效 ...

  9. 忘掉VNC/RDP,拿起手中的MobaXterm轻松上手远程桌面

    前言 原创文章,转载引用务必注明链接. 这期属于番外篇,随便写写.吐槽一下自己,关于"减少eMMC擦写,延长NAND寿命提升性能"的坑还没填完,都不好愉快地写点轻松的小项目灌水了. ...

  10. Git多账号登陆

        最近工作上遇到了使用git+repo的情况,需要用公司的邮箱和账号名重新申请ssh公私密钥,而我本身在github上也有一些开源项目,这里就是记录一下我是如何实现git多账号登陆的.   取消 ...