在Ubuntu 14.04 64bit上进行md5加密编程
计算指定字符串的md5值是一项很常见的操作,包括使用命令行md5sum,或者在C/C++编程中调用openssl提供的接口函数来进行。下面我们分别阐述如下:
一、在命令行中使用md5校验
计算某个文件的md5校验值,通常就是在命令行输入md5sum就可以了
但是如果要方便地计算一个给出字符串的md5值,则md5sum就不合适了,因为md5sum只针对文件操作。为此我想到下面的变通方法:
在/usr/bin下面编写一个bash脚本
sudo vim md5
#!/bin/bash
echo -n $1 | md5sum | awk '{print $1}'
保存后,赋予可执行权限
sudo chmod +x md5
这样就可以方便地计算任意字符串的值了。参见如下截图
二、使用OpenSSL中md5接口编程(使用MD5加密)
我们以一个字符串为例,新建一个文件filename.txt,在文件内写入hello ,然后在Linux下可以使用命令md5sum filename.txt计算md5值 ==> b1946ac92492d2347c6235b4d2611184 。虽然写入的是hello这5个字符,但是我们使用命令xxd filename.txt后可以看出文件结尾处会有个0x0a这个回车符。所以在下面的代码中才会有\n。
下面是提供的md5函数的接口
//打开/usr/include/openssl/md5.h这个文件我们可以看到一些函数
// 初始化 MD5 Contex, 成功返回1,失败返回0
int MD5_Init(MD5_CTX *c);
// 循环调用此函数,可以将不同的数据加在一起计算MD5,成功返回1,失败返回0
int MD5_Update(MD5_CTX *c, const void *data, size_t len);
// 输出MD5结果数据,成功返回1,失败返回0
int MD5_Final(unsigned char *md, MD5_CTX *c);
// MD5_Init,MD5_Update,MD5_Final三个函数的组合,直接计算出MD5的值
unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md);
// 内部函数,不需要调用
void MD5_Transform(MD5_CTX *c, const unsigned char *b);
下面是分别针对字符串和本地文件的源码
str_md5_demo.c文件:
//gcc -g str_md5_demo.c -o str_md5_demo -lcrypto
//
#include <string.h>
#include <stdio.h>
#include <openssl/md5.h>int main(int argc, char* argv[]){MD5_CTX ctx;unsigned char md[16] = {0};int i = 0;//方法一:MD5_Init(&ctx);MD5_Update(&ctx, "hel", 3);MD5_Update(&ctx, "lo", 2);MD5_Final(md, &ctx);for (i = 0; i < 16; i++)printf("%02X", md[i]);printf("\n");//方法二:const char data[] = "hello";MD5(data, strlen(data), md);for (i = 0; i < 16; i++)printf("%02X", md[i]);printf("\n");return 0;
}
file_md5_demo.c:
//gcc -g file_md5_demo.c -o file_md5_demo -lcrypto
//#include <string.h>
#include <stdio.h>
#include <openssl/md5.h>int main(int argc, char* argv[]){MD5_CTX ctx;unsigned char md[16] = {0};char buffer[1024] = {0};char filename[64] = {0};int len = 0, i;FILE* fp = NULL;printf("请输入文件名, 用于计算MD5值\n");scanf("%s", filename);fp = fopen(filename, "rb");if(NULL == fp){printf("can't open file\n");return 1;}//方法一:MD5_Init(&ctx);while((len=fread(buffer, 1, sizeof(buffer), fp)) > 0){MD5_Update(&ctx, buffer, len);memset(buffer, 0 ,sizeof(buffer));}MD5_Final(md, &ctx);for(i=0; i<16; i++)printf("%02X", md[i]);printf("\n");//方法二:while((len=fread(buffer, 1, sizeof(buffer), fp)) > 0){MD5(buffer, len, md);memset(buffer, 0 ,sizeof(buffer));}for(i=0; i<16; i++)printf("%02X", md[i]);printf("\n");if(fp) fclose(fp);return 0;
}
下面是运行效果截图, 同时给出了与md5或是md5check的对比图:
参考文献
[1].http://www.cnblogs.com/wunaozai/p/3887009.html
[2].http://www.cppblog.com/API/archive/2013/08/09/202427.html
[3].http://blog.webfuns.net/archives/1477.html
在Ubuntu 14.04 64bit上进行md5加密编程相关推荐
- 在Ubuntu 14.04 64bit上安装Markdown和绘图软件Haroopad
简介 Haroopad:一款让你欲罢不能的Markdown编辑器 身为大程序员,我本来是不需要 Markdown 编辑器的,但是 Haroopad 让我简直欲罢不能,不能再爱更多.跨平台,代码高亮,V ...
- 在Ubuntu 14.04 64bit上安装StarUML 2.5版本
StarUML是来自韩国的一个优秀的UML绘图软件, 原来是免费软件, 现在需要付费购买.当然免费使用功能会有诸多限制. 它支持Windows, Linux和Mac OS等平台. 下面是我在Ubunt ...
- 在Ubuntu 14.04 64bit上生成ATS本地离线文档
下面是在Ubuntu 14.04 64bit上生成ats本地离线文档的方法 首先请安装配置好sphinx环境,参见我前面的博文 http://blog.csdn.net/tao_627/article ...
- 在Ubuntu 14.04 64bit上编译并研究State Threads网络线程库源码
State Threads是一个广受关注的高性能网络线程库,winlin在SRS中做了比较充分的应用,我很遗憾直到现在才精心研究它.下面是我的研究实录,以作备忘. 一.源码编译 下面是在Ubuntu ...
- 在Ubuntu 14.04 64bit上安装Markdown编辑器Remarkble
目前Markdown已经是非常流行和高效的文档整理和书写工具语言, 我以前接触过, 但是一直没有坚持下来, 这次五一假期期间我强迫自己去熟悉它的语法格式和编辑器, 原来我在Ubuntu 14.04 6 ...
- 在Ubuntu 14.04 64bit上安装百度云Linux客户端BCloud
百度云是一个不错的网盘,Bcloud 是一个 Linux 下超赞的客户端, 官网 github: https://github.com/LiuLang/bcloud-packages 和kwplaye ...
- 在ubuntu 14.04 64bit上安装酷我音乐盒Linux客户端kwplayer
kwplayer 是linux桌面下的轻量级的音乐播放软件, 由LiuLang同学开发, 使用的是Python3+gtk3, 开源的(GPLv3). 它的主要特点有: • 使用了kuwo.cn(酷我音 ...
- 在Ubuntu 14.04 64bit上安装numpy和matplotlib库
机器学习是数据挖掘的一种实现形式,在学习<机器学习实战>过程中,需要python环境中安装好numpy和matplotlib库,特此将我在Ubuntu 14.04 64bit上的摸索过程总 ...
- Ubuntu 14.04 64bit上升级Intel官方集显更新驱动程序
Intel官网上发出了最新版的Linux版本的集显驱动更新程序 但是,使用Ubuntu 14.04 64bit上的软件中心无法自动去更新该集显驱动更新程序,说是不安装未被确认安全的程序.下面是我采用的 ...
最新文章
- Linux Shell脚本实现根据进程名杀死进程
- 高性能WEB开发 - HTTP服务器篇
- css3玩转各种效果【资源】
- 报告指出数据中心效率有所提高
- Model、ModelMap和ModelAndView的使用详解
- jquery.validate动态更改校验规则
- 去除地址栏带#的问题
- 网络协议 18 - CDN:家门口的小卖铺
- 十个最常用深度学习图像/视频数据标注工具
- 鲁棒控制--simulink不确定模型仿真
- 基于java水果网店管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
- vector实现 并交差 集实例
- 使用Python获取100以内的质数
- html 脚本错误,脚本错误怎么解决,教您脚本错误怎么解决?
- 对于网络文学而言 计算机叙事,90年代文学的“增量”
- 苹果电池显示维修_iPhone电池健康显示“维修”的原因和解决办法
- APUE-第5章 标准IO库
- Js年龄计算,精确到岁、月、小时
- Y470N 显卡超频了GT550m 完美2.10 bios
- 图文翻页-兼容IE8和Chrome浏览器
热门文章
- Java Websocket实例【服务端与客户端实现全双工通讯】
- 2022-2028年中国无菌手套产业发展动态及投资趋势预测报告
- 谈谈对web标准的理解
- 如何 搭建 RMAN 备份平台
- 机器人控制算法——Bayes Filter贝叶斯滤波器
- rabbitmq 查询版本_基于rabbitmq解决分布式事务
- wordpress php教程 pdf,wordpress二次开发全能教程.pdf
- linux双物理机weblogic集群,linux下weblogic多机器集群部署要点
- python response.json()报错_Django JsonResponse json格式报错 解决Django响应JsonResponse返回json格式数据报错问题...
- greenplum 数据库如何增加列_Greenplum行存与列存的选择以及转换方法-阿里云开发者社区...