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. 如何使用VS2013对C++进行编程

    https://msdn.microsoft.com/zh-cn/library/bb384842.aspx

  2. VBA中练习ADO:ActiveX Data Object

    前期绑定,要先添加引用---"Microsoft ActiveX Data Objects 6.1" ADO学习的权威参考可点击:w3school ADO简单理解:是几个Activ ...

  3. CSS-浮动篇float

    Float是一个强大的属性,但是它也会困扰我们如果我们不知道它的工作原理的话.这篇文章主要介绍float的原理和基本用法. 我们可以看到float在印刷世界的应用-杂志.很多杂志文章都是左边一个图片, ...

  4. android中的HttpURLConnection和HttpClient实现app与pc数据交互

    自学android的这几天很辛苦,但是很满足,因为每当学到一点点知识点都会觉得很开心,觉得今天是特别有意义的,可能这个就是一种莫名的热爱吧. 下面来说说今天学习的HttpURLConnection和H ...

  5. 从BATS交易所获取空头头寸

    Getting short volume from BATS   In my last post I have gone through the steps needed to get the sho ...

  6. How to change owner of PostgreSql database?

    ALTER DATABASE name OWNER TO new_owner;

  7. JMS消息中间件系列[ActiveMQ](一)

    版本5.13.3的特性: 1.Supports a variety of Cross Language Clients and Protocols from Java, C, C++, C#, Rub ...

  8. C中的Float分析

    C/C++中, 浮点数,float以及 double 在内存中是怎样存储的? 假如,我有32-bit 8bit 8bit 8bit 0 0 0 0 0 1 1 1 1 对于整形int,我们可以很快得出 ...

  9. Js 冒泡事件阻止

    Js 冒泡事件阻止   1. 事件目标 现在,事件处理程序中的变量event保存着事件对象.而event.target属性保存着发生事件的目标元素.这个属性是DOM API中规定的,但是没有被所有浏览 ...

  10. Keeplived配置Nginx双机高可用

    一.简介不管是Keepalived还是Heartbeat做高可用,其高可用,都是站在服务器脚本去说的高可用,而不是服务的角度.也就是说,如果服务器DOWN机或者网络出现故障,高可用是可以实现自动切换的 ...