http://blog.csdn.net/sinat_35297665/article/details/78244523

在linux机器上,有一个命令可以计算出文件的md5值,那就是md5sum,如果没有的话,就需要安装RPM包:coreutils。

现在我们使用openssl的库也可以方便的计算出文件的md5值。主要用到的函数是

int MD5_Init(MD5_CTX *c);
int MD5_Update(MD5_CTX *c, const void *data, size_t len);
int MD5_Final(unsigned char *md, MD5_CTX *c);

使用库前,先需要安装openssl的RPM包。这三个函数不需要解释,看下面一个例子就知道:

[cpp] view plain copy
  1. #include <openssl/md5.h>
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <iomanip>
  5. #include <stdlib.h>
  6. using namespace std;
  7. int main()
  8. {
  9. FILE *fd=fopen("test","r");
  10. MD5_CTX c;
  11. unsigned char md5[17]={0};
  12. if(fd == NULL)
  13. {
  14. cout << "open failed" << endl;
  15. return -1;
  16. }
  17. int len;
  18. unsigned char *pData = (unsigned char*)malloc(1024*1024*1024);
  19. if(!pData)
  20. {
  21. cout << "malloc failed" << endl;
  22. return -1;
  23. }
  24. MD5_Init(&c);
  25. while( 0 != (len = fread(pData, 1, 1024*1024*1024, fd) ) )
  26. {
  27. MD5_Update(&c, pData, len);
  28. }
  29. MD5_Final(md5,&c);
  30. for(int i = 0; i < 16; i++)
  31. cout << hex << setw(2) << setfill('0') << (int)md5[i];
  32. cout << endl;
  33. fclose(fd);
  34. free(pData);
  35. return 0;
  36. }

编译链接选项为:

g++ test.cpp -o testmd5 -lcrypto -lssl

生成testmd5后,我们把一个300多M的test文件放到与testmd5一个目录。并把testmd5生成的结果和linux命令"md5sum test" 结果对比,会发现是一样的。如下图:

有兴趣可以参考openssl源码

使用openssl的md5库相关推荐

  1. OpenSSL源码库目录解析

    OpenSSL目录名以及功能描述 目录名 功能描述 Crypto 存放OpenSSL所有加密算法源码文件和相关标注如X.509源码文件,是OpenSSL中最重要的目录,包含了OpenSSL密码算法库的 ...

  2. 【OpenSSL】OpenSSL之MD5

    00. 目录 文章目录 00. 目录 01. MD5简介 02. 发展历史 03. MD5应用场景 04. OpenSSL中MD5 05. MD5测试代码 06. 附录 01. MD5简介 MD5信息 ...

  3. ios 编译ffmpeg 支持 x264 fdk-aac openssl 并裁剪库大小

    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2018-10-11更新 android平台编译 右转 新的报错信息 ./lib ...

  4. 使用开源的openssl的md5头文件,实现对于文件的md5代码

    需要安装openssl的库 sudo apt-get install openssl sudo apt-get install libssl-dev 参考链接 代码 #include "op ...

  5. C++安全方向(三)3.3 openssl的MD5接口调用演示

    如下代码: 1064420127下载代码和学员交流*/#include <iostream> #include <openssl/md5.h> using namespace ...

  6. libcurl linux 静态链接库_Linux ubuntu OpenSSL + curl 静态库编译及使用

    下载源码 源码编译 解压之后,进入源码目录openssl-1.1.0f,执行如下命令.因为只需要编译静态库,也没有特殊要求,所以使用的编译选项配置很简单: ./config -fPIC no-shar ...

  7. openssl java des_OPENSSL库的使用-DES篇

    一.单DES算法ECB模式加解密 1.使用函数DES_set_key_unchecked设置密钥 2.使用函数DES_ecb_encrypt来进行数据加解密 void DES_ecb_encrypt( ...

  8. C语言 Openssl的md5使用方式

    方式1 #include <openssl/md5.h> #include <stdio.h> #include <string.h> void md5hexToS ...

  9. python2 md5库_python版本坑:md5例子(python2与python3中md5区别)

    起步 对于一些字符,python2和python3的md5加密出来是不一样的. # python2.7 pwd = "xxx" + chr(163) + "fj" ...

最新文章

  1. BZOJ 1176: [Balkan2007]Mokia( CDQ分治 + 树状数组 )
  2. web项目html页面过多,详解webpack4多入口、多页面项目构建案例
  3. DB2数据库V8.2版本远程连接方法
  4. flutter开发之必须掌握的dart知识点:list,set,map
  5. hdfs的特性、命令、安全模式、基准测试
  6. 使用Python发送电子邮件
  7. oracle 强制 断开,ORA-01092: ORACLE 例程终止。强行断开连接
  8. Visual Studio Code 1.43 发布
  9. JavaScriptCore框架在iOS7中的对象交互和管理
  10. C++ string类常用函数
  11. 软件一定要联网安装,只有内网就干瞪眼
  12. 一个简单的python小游戏
  13. Unity3D 广播星历与精密星历
  14. 想要糖尿病逆转,健康饮食必不可少
  15. 【测绘程序设计】Excel度分秒(° ‘ “)转换度(°)模板附代码超实用版
  16. SwiftUI 人工智能教程之图像识别植物或花朵通过图片和相机
  17. top和margin-top等的区别
  18. python loop call soon_python中call方法怎么使用?
  19. 妻子决定你未来事业的高度,男的看一看,女的学一学
  20. python控制画笔尺寸_python教程系列终章:画笔控制

热门文章

  1. vs 2012,vs 2013问题系列
  2. Eclipse for android 中设置java和xml代码提示功能(转)
  3. mvc的Controller返回值类型ActionResult详解
  4. 用GDB Server进行远程调试
  5. android 系统挂载ext4格式U盘,macOS 系统下格式化 U 盘为 ext4 格式
  6. python多大孩子可以学_孩子学编程最佳年龄是多大
  7. 计算机扬天m400c联想,【联想扬天M参数】联想扬天M系列台式电脑参数-ZOL中关村在线...
  8. MongoDB 数组类型查询 —— $elemMatch 操作符
  9. linux c实现mypwd
  10. gp的分布、分区策略(概述)