OpenSSL安装

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

2.在linux解压压缩包

3.安装OpenSSL

  1. ./config --prefix=/usr/local --openssldir=/usr/local/ssl
  2. make && make install
  3. ./config shared --prefix=/usr/local --openssldir=/usr/local/ssl
  4. make clean
  5. make && make install

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

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

openssl MD5接口

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

代码实现

  1. #include <iostream>
  2. #include <fstream>
  3. #include <iomanip>
  4. #include <string>
  5. #include <openssl/md5.h>
  6.  
  7. using namespace std;
  8.  
  9. #define MAXDATABUFF 1024
  10. #define MD5LENTH 16
  11.  
  12. int main(int arc,char *arv[])
  13. {
  14. string strFilePath = arv[];
  15. ifstream ifile(strFilePath.c_str(),ios::in|ios::binary); //打开文件
  16. unsigned char MD5result[MD5LENTH];
  17. do
  18. {
  19. if (ifile.fail()) //打开失败不做文件MD5
  20. {
  21. cout<<"open file failure!so only display string MD5!"<<endl;
  22. break;
  23. }
  24. MD5_CTX md5_ctx;
  25. MD5_Init(&md5_ctx);
  26.  
  27. char DataBuff[MAXDATABUFF];
  28. while(!ifile.eof())
  29. {
  30. ifile.read(DataBuff,MAXDATABUFF); //读文件
  31. int length = ifile.gcount();
  32. if(length)
  33. {
  34. MD5_Update(&md5_ctx,DataBuff,length); //将当前文件块加入并更新MD5
  35. }
  36. }
  37. MD5_Final(MD5result,&md5_ctx); //获取MD5
  38. cout<<"file MD5:"<<endl;
  39. for(int i = ; i < MD5LENTH; i++) //将MD5以16进制输出
  40. cout<< hex <<(int)MD5result[i];
  41. cout<<endl;
  42. }while(false);
  43.  
  44. MD5((const unsigned char*)strFilePath.c_str(),strFilePath.size(),MD5result); //获取字符串MD5
  45. cout<<"string MD5:"<<endl;
  46. for(int i = ; i < MD5LENTH; i++)
  47. cout << hex << (int)MD5result[i];
  48. cout<<endl;
  49. return ;
  50. }

SConstruct

  1. 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四元数相乘先后顺序的问题

    在unity中四元数和向量相乘在unity中可以变换旋转.四元数和四元数相乘类似矩阵与矩阵相乘的效果. 矩阵相乘的顺序不可互换,只有特殊条件矩阵才可互换.四元数相乘类似,今天就因为这个问题掉进坑里了, ...

  2. LA 3523 圆桌骑士

    题目链接:http://vjudge.net/contest/141787#problem/A http://poj.org/problem?id=2942 此题很经典 知识点:DFS染色,点-双连通 ...

  3. word2013 blog test

    测试一:style里的内容能保存吗?: int        read; byte *    buf; int        tries; int        read; byte *    buf ...

  4. python除法

    1. >>> from __future__ import division >>> 2/3 0.6666666666666666 操作数为何种数值类型将影响结果 ...

  5. 【转】CentOS下载版本介绍

    官网:http://www.centos.org/ 下载:http://mirror.neu.edu.cn/centos/6.6/isos/ 系统运维:http://www.osyunwei.com/ ...

  6. js数组的一些操作

    原文地址:flash很好玩  http://www.cnblogs.com/yuzhongwusan/archive/2008/12/15/1355378.html arr = new Array(1 ...

  7. 11.安装KVM虚拟机

    安装KVM虚拟机是一大难题,不按照虚拟机物理机128G内存和强劲的CPU无法充分利用.也不便于后面的jenkins自动部署.安装KVM虚拟机过程我是借鉴了网上下载的马哥linux   KVM那块的内容 ...

  8. 区别ie8和ie9的方法

    众所周知 区别ie6~8的方法是: width:10px;//chrome width:10px\9;//ie8+ *width:10px;//ie7 _width:10px;//ie6 区别ie8以 ...

  9. cube定时器延时不准确原因

    昨天晚上测试32cube配置好定时器,以1ms为一次中断,然后在程序中做了一个1s的延时,结果发现实际延时5s左右,百思不得其解,仔细查看cube配置也没问题.最后我打开生成工程文件夹里面的ioc文件 ...

  10. Python之路 day2 购物车小程序1

    #Author:ersa ''' 程序:购物车程序 需求: 启动程序后,让用户输入工资,然后打印商品列表 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 可随时 ...