OpenSSL安装

1.github下载最新的OpenSSL:https://github.com/openssl/openssl

2.在linux解压压缩包

3.安装OpenSSL

 ./config  --prefix=/usr/local --openssldir=/usr/local/ssl
make && make install
./config shared --prefix=/usr/local --openssldir=/usr/local/ssl
make clean
make && make install

4.用ln将需要的so文件链接到/usr/lib或者/lib这两个默认的目录下面

 ln -s /where/you/install/lib/*.so /usr/lib
sudo ldconfig

openssl MD5接口

 int MD5_Init(MD5_CTX *c);
//初始化MD5上下文结构 int MD5_Update(MD5_CTX *c, const void *data, size_t len);
//刷新MD5,将文件连续数据分片放入进行MD5刷新。 int MD5_Final(unsigned char *md, MD5_CTX *c);
//产生最终的MD5数据 unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md);
//直接产生字符串的MD5

代码实现

 #include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <openssl/md5.h> using namespace std; #define MAXDATABUFF 1024
#define MD5LENTH 16 int main(int arc,char *arv[])
{
string strFilePath = arv[];
ifstream ifile(strFilePath.c_str(),ios::in|ios::binary); //打开文件
unsigned char MD5result[MD5LENTH];
do
{
if (ifile.fail()) //打开失败不做文件MD5
{
cout<<"open file failure!so only display string MD5!"<<endl;
break;
}
MD5_CTX md5_ctx;
MD5_Init(&md5_ctx); char DataBuff[MAXDATABUFF];
while(!ifile.eof())
{
ifile.read(DataBuff,MAXDATABUFF); //读文件
int length = ifile.gcount();
if(length)
{
MD5_Update(&md5_ctx,DataBuff,length); //将当前文件块加入并更新MD5
}
}
MD5_Final(MD5result,&md5_ctx); //获取MD5
cout<<"file MD5:"<<endl;
for(int i = ; i < MD5LENTH; i++) //将MD5以16进制输出
cout<< hex <<(int)MD5result[i];
cout<<endl;
}while(false); MD5((const unsigned char*)strFilePath.c_str(),strFilePath.size(),MD5result); //获取字符串MD5
cout<<"string MD5:"<<endl;
for(int i = ; i < MD5LENTH; i++)
cout << hex << (int)MD5result[i];
cout<<endl;
return ;
}

SConstruct

Program('md5','md5.cpp',LIBS = ['ssl','crypto'])

测试结果与命令行比较

OpenSSL - 文件和字符MD5加密实现的更多相关文章

  1. Python: 对CSV文件读写 和 Md5加密

    1. python 有专门的csv包,直接导入即可. import csv: 2. 直接使用普通文件的open方法 csv_reader=open("e:/python/csv_data/l ...

  2. Android初级教程:对文件和字符串进行MD5加密工具类

    转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/52200008   点击打开链接 之前写过一篇博文,是针对字符串进行md5加密的.今 ...

  3. 【ORACLE】MD5加密

        今天乌干达充值卡入库时,发现有资源已经存在的异常, 异常原因经过核实是由于卡资源密码在库中已经存在, 为进一步查找存在的原因, 因此需要对导入文件密码的MD5 加密, 通过MD5加密后的字符串 ...

  4. gulp 对js\css进行md5 加密

    有的服务器为了网站加载速度,会做服务器缓存,这样就会出现代码出现引用地址没变,新代码不生效,而我们又希望新代码可以及时生效,这样我们就需要避免缓存,当然也有很多方法,本文只介绍使用gulp-rev(对 ...

  5. linux md5 加密字符串和文件方法

    linux md5 加密字符串和文件方法 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意 ...

  6. MD5工具类,提供字符串MD5加密、文件MD5值获取(校验)功能

    MD5工具类,提供字符串MD5加密(校验).文件MD5值获取(校验)功能 : package com.yzu.utils; import java.io.File; import java.io.Fi ...

  7. Java实现MD5加密_字符串加密_文件加密

    Java实现MD5加密,具体代码如下: package com.bstek.tools; import java.io.FileInputStream; import java.io.IOExcept ...

  8. Django中web开发用md5加密图片名并存储静态文件夹

    一般在开发中,有的网站存在大量图片,首先图片的名称是不能重复的, 但是除了数据库可用的id以外我们可以用time模块中time.time()获取的时间来进行md5加密操作, 因为time模块所产生的时 ...

  9. MD5加密文件

    package cn.net.comsys.ut.util; import java.io.File;import java.io.FileInputStream;import java.io.IOE ...

随机推荐

  1. Unity中通过类名字符串取组件类型的方法(Types.GetType用法)

    正常调用Type.GetType取不到组件,因为会先创建实例在获取,而Unity组件无法通过new来创建. 第二种创建方式是通过程序集,具体如下 Assembly.GetExecutingAssemb ...

  2. MySql + EF6 + .Net Core

    2016年8月17日01:21:29 更新:这里介绍一下一个开源的 EF Core 的 MySQL 组件 [MySQL for .NET Core - Pomelo 扩展包系列][http://www ...

  3. C/C++ 宏中的 #、#@、##的作用

    宏中的# 功能是将其后面的宏参数进行字符串化操作(Stringizing operator), 简单说就是在它引用的宏变量的左右各加上一个双引号. #define STRING(x) #x 下面二条语 ...

  4. How can I view currently running MySQL queries?( 查看正在运行的MySQL语句/脚本命令)

    show processlist;show processlist\G;SHOW FULL PROCESSLIST;SHOW FULL PROCESSLIST\G; REF:http://dev.my ...

  5. Mac下用g++编译opencv程序报错

    问题描述: 在Mac下安装好opencv, 安装:    bash  brew install opencv      写了一个opencv程序:    ``` C++ //作用就是:取视频的每一帧, ...

  6. 《BI那点儿事》三国数据分析系列——蜀汉五虎上将与魏五子良将武力分析,绝对的经典分析

    献给广大的三国爱好者们,希望喜欢三国的朋友一起讨论,加深对传奇三国时代的了解 数据分析基础概念:集中趋势分析是指在大量测评数据分布中,测评数据向某点集中的情况.总体(population)是指客观存在 ...

  7. STM32学习笔记(十) CAN通讯测试(环回模式)

    1.CAN通讯的理解 想学习CAN通讯,那么要对通讯协议有一定的认知.通讯协议是指通信双方对数据传送控制的一种约定.约定中包括对数据格式,同步方式,传输速度,传送步骤,检纠错方式以及控制字符定义等问题 ...

  8. CSS 3 选择器

    css3叫做样式表  对页面的布局,字体,颜色,背景和其他效果做更精确的布置 支持的浏览器有 chrome safari firfox opera 甚至360都开始支持360用的是别的内核 IE10 ...

  9. PCA理论与实践

    PCA作用: 降维,PCA试图在力保数据信息丢失最少的原则下,用较少的综合变量代替原本较多的变量,而且综合变量间互不相关,减少冗余以及尽量消除噪声.   PCA数学原理: 设 是维向量 想经过线性变换 ...

  10. 关于extra加强延迟加载

    一对多和多对多关联的查询策略 lazy属性的另一个属性extra 加强延迟加载 表明采用增强延迟加载策略:在<set>元素配置lazy属性为"extra".增强延迟加载 ...