在C++中使用Libmd5计算字符串或文件的MD5值
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值的更多相关文章
- 计算字符串和文件的MD5值
//计算字符串的MD5值 public string GetMD5(string sDataIn) { MD5CryptoServiceProvider md5 = new MD5CryptoServ ...
- c# 计算字符串和文件的MD5值的方法
快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中. <HTML开发Mac OS App 视频教程> 土豆网同步更新:http: ...
- 我的Java开发学习之旅------>工具类:Java获取字符串和文件进行MD5值
ps:这几天本人用百度云盘秒传了几部大片到云盘上,几个G的文件瞬秒竟然显示"上传成功"!这真让我目瞪口呆,要是这样的话,那得多快的网速,这绝对是不可能的,也许这仅是个假象.百度了一 ...
- 使用C语言获取字符串或文件的MD5值
libmd5地址:https://sourceforge.net/projects/libmd5-rfc/ MD5Demo1.c #include <stdio.h> #include & ...
- 在.NET中计算文件的MD5值
更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月2日. 直接上代码吧: using System; using System.IO; using System.Security. ...
- C#计算文件的MD5值实例
C#计算文件的MD5值实例 MD5 是 Message Digest Algorithm 5(信息摘要算法)的缩写,MD5 一种散列(Hash)技术,广泛用于加密.解密.数据签名和数据完整性校验等方面 ...
- python计算文件的md5值
前言 最近要开发一个基于python的合并文件夹/目录的程序,本来的想法是基于修改时间的比较,即判断文件有没有改变,比较两个文件的修改时间即可.这个想法在windows的pc端下测试没有问题. 但是当 ...
- 使用python求字符串或文件的MD5
使用python求字符串或文件的MD5 五月 21st, 2008 #以下可在python3000运行. #字符串md5,用你的字符串代替'字符串'中的内容. import hashlib md5=h ...
- c#计算文件的MD5值
代码: /// <summary> /// 计算文件的 MD5 值 /// </summary> /// <param name="fileName" ...
随机推荐
- AS创建工程结构
- input加border-raduis之后再加border有阴影
在border之前加入: background:no-repeat 0 0 scroll #fff;border:none;outline:medium;即可解决
- 凌乱的桌子和与 Web 的设计理念说明
Python是一门脚本语言,因为能将其他各种编程语言写的模块粘接在一起,也被称作胶水语言.强大的包容性.强悍的功能和应用的广泛性使其受到越来越多的关注,想起一句老话:你若盛开,蝴蝶自来. 如果你感觉学 ...
- HDU 4819 Mosaic 【二维线段树】
题目大意:给你一个n*n的矩阵,每次找到一个点(x,y)周围l*l的子矩阵中的最大值a和最小值b,将(x,y)更新为(a+b)/2 思路:裸的二维线段树 #include<iostream> ...
- BZOJ2245 [SDOI2011]工作安排 【费用流】
题目 你的公司接到了一批订单.订单要求你的公司提供n类产品,产品被编号为1~n,其中第i类产品共需要Ci件.公司共有m名员工,员工被编号为1~m员工能够制造的产品种类有所区别.一件产品必须完整地由一名 ...
- leetcode 350
找两个数组的交叉部分,可以用map进行标记 首先对第一个数组进行记录,第二个数组在第一个数组记录基础上进行判断,如果在第一个数组出现过,就记录 class Solution { public: vec ...
- spring5响应式编程
1.Spring5新特性 2.响应式编程响应式编程:非阻塞应用程序,借助异步和事件驱动还有少量的线程垂直伸缩,而非横向伸缩(分布式集群)当Http连接缓慢的时候,从数据库到Http数据响应中也会 ...
- javaScriptCore 实战与小结
源码在这,看不懂的直接撸源码就行,转载声明出处 原生调用JS的大致流程,做了个思维简图 这是代码流程 // JS数据 func getJSVar() { let context: JSContex ...
- 玩转css样式选择器----当父元素有多个子元素时选中第一个
- css3 nth-child 与 nth-of-type 的区别
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1709 一.深呼吸,直 ...