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. 【Android】页面迁移时先弹出键盘问题解决

    android自动弹出软键盘(输入键盘) 在AndroidMainfest.xml内容无法更改情况下,也就是键盘非要弹出情况下,进入此页面时先关闭软键盘不让其弹出 InputMethodManager ...

  2. [NOI2001] 食物链 (扩展域并查集)

    题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种,但是我 ...

  3. c++ 多线程:线程句柄可以提前关闭,但是线程并没有关闭

    很多程序在创建线程都这样写的:ThreadHandle = CreateThread(NULL,0,.....);CloseHandel(ThreadHandle );1,线程和线程句柄(Handle ...

  4. HP-Unix安装Memcache问题

    安装环境 HP-UX 125RITEC B.11.31 U ia64 0942432495 gcc (GCC) 4.3.1 libevent-1.4.14b-stable.tar.gz memcach ...

  5. response.sendRedirect()使用注意事项

    用response.sendRedirect做转向其实是向浏览器发送一个特殊的Header,然后由浏览器来做转向,转到指定的页面,所以用sendRedirect时,浏览器的地址栏上可以看到地址的变化. ...

  6. 染色(bzoj 2243)

    Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“ ...

  7. Wannafly挑战赛11 D 题 字符串hash + 卡常

    题目链接 https://ac.nowcoder.com/acm/contest/73#question map与order_map https://blog.csdn.net/BillCYJ/art ...

  8. java集合系列之HashMap源码

    java集合系列之HashMap源码 HashMap的源码可真不好消化!!! 首先简单介绍一下HashMap集合的特点.HashMap存放键值对,键值对封装在Node(代码如下,比较简单,不再介绍)节 ...

  9. WIN7实现多用户远程桌面

    版权声明:本文为博主原创文章,未经博主允许不得转载. 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://jonnyqin.blog. ...

  10. String、StringBuffer和StringBuilder的差别

    String.StringBuffer和StringBuilder的差别 1.String类是不可变类,即一旦一个String对象被创建后.包括这个对象中的字符序列是不可改变的 2.在字符串拼接的过程 ...