md5 加密算法和升级
在这里插一小节加密的吧,使用openssl库进行加密。
使用MD5加密
我们以一个字符串为例,新建一个文件filename.txt,在文件内写入hello ,然后在Linux下可以使用命令md5sum filename.txt计算md5值 ==> b1946ac92492d2347c6235b4d2611184 。虽然写入的是hello这5个字符,但是我们使用命令xxd filename.txt后可以看出文件结尾处会有个0x0a这个回车符。所以在下面的代码中才会有\n。
1 //打开/usr/include/openssl/md5.h这个文件我们可以看到一些函数
2 // 初始化 MD5 Contex, 成功返回1,失败返回0
3 int MD5_Init(MD5_CTX *c);
4 // 循环调用此函数,可以将不同的数据加在一起计算MD5,成功返回1,失败返回0
5 int MD5_Update(MD5_CTX *c, const void *data, size_t len);
6 // 输出MD5结果数据,成功返回1,失败返回0
7 int MD5_Final(unsigned char *md, MD5_CTX *c);
8 // MD5_Init,MD5_Update,MD5_Final三个函数的组合,直接计算出MD5的值
9 unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md);
10 // 内部函数,不需要调用
11 void MD5_Transform(MD5_CTX *c, const unsigned char *b);
新建一个cpp文件用于计算MD5值
1 #include <openssl/md5.h>
2 #include <string.h>
3 #include <stdio.h>
4
5 int main()
6 {
7 MD5_CTX ctx;
8 unsigned char outmd[16];
9 int i=0;
10
11 memset(outmd,0,sizeof(outmd));
12 MD5_Init(&ctx);
13 MD5_Update(&ctx,"hel",3);
14 MD5_Update(&ctx,"lo\n",3);
15 MD5_Final(outmd,&ctx);
16 for(i=0;i<16;i<i++)
17 {
18 printf("%02X",outmd[i]);
19 }
20 printf("\n");
21 return 0;
22 }
编译选项为: g++ MD5test.cpp -lssl -o MD5test
运行后的结果为: B1946AC92492D2347C6235B4D2611184
注意这里用到openssl库,可以运行 yum install openssl 和 yum install openssl-devel 进行安装。
下面这个代码是对文件进行MD5计算。
1 #include <openssl/md5.h>
2 #include <string.h>
3 #include <stdio.h>
4
5 int main()
6 {
7 MD5_CTX ctx;
8 unsigned char outmd[16];
9 char buffer[1024];
10 char filename[32];
11 int len=0;
12 int i;
13 FILE * fp=NULL;
14 memset(outmd,0,sizeof(outmd));
15 memset(filename,0,sizeof(filename));
16 memset(buffer,0,sizeof(buffer));
17 printf("请输入文件名,用于计算MD5值:");
18 scanf("%s",filename);
19 fp=fopen(filename,"rb");
20 if(fp==NULL)
21 {
22 printf("Can't open file\n");
23 return 0;
24 }
25
26 MD5_Init(&ctx);
27 while((len=fread(buffer,1,1024,fp))>0)
28 {
29 MD5_Update(&ctx,buffer,len);
30 memset(buffer,0,sizeof(buffer));
31 }
32 MD5_Final(outmd,&ctx);
33
34 for(i=0;i<16;i<i++)
35 {
36 printf("%02X",outmd[i]);
37 }
38 printf("\n");
39 return 0;
40 }
运行得到结果后,我们可以使用md5sum命令进行验证。
使用SHA1加密
openssl里几个函数讲解
1 //SHA1算法是对MD5算法的升级,计算结果为20字节(160位),使用方法如下:
2 //打开/usr/include/openssl/sha.h这个文件我们可以看到一些函数
3 // 初始化 SHA Contex, 成功返回1,失败返回0
4 int SHA_Init(SHA_CTX *c);
5 // 循环调用此函数,可以将不同的数据加在一起计算SHA1,成功返回1,失败返回0
6 int SHA_Update(SHA_CTX *c, const void *data, size_t len);
7 // 输出SHA1结果数据,成功返回1,失败返回0
8 int SHA_Final(unsigned char *md, SHA_CTX *c);
9 // SHA_Init,SHA_Update,SHA_Final三个函数的组合,直接计算出SHA1的值
10 unsigned char *SHA(const unsigned char *d, size_t n, unsigned char *md);
11 // 内部函数,不需要调用
12 void SHA_Transform(SHA_CTX *c, const unsigned char *data);
13
14 //上面的SHA可以改为SHA1,SHA224,SHA256,SHA384,SHA512就可以实现多种加密了
我们对上面的程序进行修改
1 #include <openssl/sha.h>
2 #include <string.h>
3 #include <stdio.h>
4
5 int main()
6 {
7 SHA_CTX stx;
8 unsigned char outmd[20];//注意这里的字符个数为20
9 char buffer[1024];
10 char filename[32];
11 int len=0;
12 int i;
13 FILE * fp=NULL;
14 memset(outmd,0,sizeof(outmd));
15 memset(filename,0,sizeof(filename));
16 memset(buffer,0,sizeof(buffer));
17 printf("请输入文件名,用于计算SHA1值:");
18 scanf("%s",filename);
19 fp=fopen(filename,"rb");
20 if(fp==NULL)
21 {
22 printf("Can't open file\n");
23 return 0;
24 }
25
26 SHA1_Init(&stx);
27 while((len=fread(buffer,1,1024,fp))>0)
28 {
29 SHA1_Update(&stx,buffer,len);
30 memset(buffer,0,sizeof(buffer));
31 }
32 SHA1_Final(outmd,&stx);
33
34 for(i=0;i<20;i<i++)
35 {
36 printf("%02X",outmd[i]);
37 }
38 printf("\n");
39 return 0;
40 }
MD5有128bit(16个char)*SHA1有160bit(20个char)*SHA256有256bit(32个char)*SHA244有244bit(28个char)*SHA512有512bit(64个char).所以要注意修改大小哦:-O
md5 加密算法和升级的更多相关文章
- 一起谈谈MD5加密算法
MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆:所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后 ...
- MD5加密算法
package com.bao.tools.encryption; import java.security.MessageDigest;import java.security.NoSuchAlgo ...
- md5加密算法c语言版
from: http://blog.sina.com.cn/s/blog_693de6100101kcu6.html 注:以下是md5加密算法c语言版(16/32位) ---------------- ...
- MD5加密算法测试
在用户注册这一块,密码加密保证客户信息安全是最重要的,在网上查询了一些资料,发现加密算法比较流行的有MD5,DES和SHA. 虽然SHA与MD5通过碰撞法被破解了,但是MD5和SHA仍被公认是安全的加 ...
- 标准MD5加密算法
标准MD5加密算法: public class Md5 { public static String getMd5(String s) { char hexDigits[] = { '0', '1', ...
- MD5加密算法(java及js)
为了防止用户登陆过程中信息被拦截导致信息泄露,我们应该在客户端就对用户密码进行加密.浏览器提交给服务器的是加密后的信息,即使被恶意拦截,被拦截信息也已做了加密处理,现在比较安全的一种加密算法是MD5加 ...
- MD5加密算法的Java版本
网上搜索Java实现MD5的资料很多,错误的也很多. 之前编写的一个阿里云直播鉴权原理算法需要用到MD5算法,网上找了几个,都是不行,浪费了时间,现在贴一个,做备用. import java.secu ...
- JAVA实现MD5加密算法(使用MessageDigest)
http://blog.csdn.net/ymc0329/article/details/6738711 *********************************************** ...
- c++Builder XE6 MD5 加密算法 BASE64 URL 编码
xe6,xe7 BASE64XE6 MD5 加密算法Delphifunction MD5(const texto: string): string; var idmd5: TIdHashMessage ...
随机推荐
- cms-详细页面-1
cms-详细信息页面设计思路:点击主页面然后查询详细信信,把查询出来的数据放大modelandvie里面,然后返回前台,然后在跳转页面取出来显示:代码:mapper: <?xml version ...
- pta 编程题16 Saving James Bond - Easy Version
其它pta数据结构编程题请参见:pta 题目 主要用到了深度优先搜索. #include <iostream> using namespace std; struct Vertex { i ...
- linux 命令——ls
一. ls命令 ls 命令是linux下最常用的命令.ls命令就是list的缩写缺省下ls用来打印出当前目录的清单如果ls指定其他目录那么就会显示指定目录里的文 件及文件夹清单. 通过ls 命 ...
- IOS tableView的数据刷新
1.tableView的刷新 1> 数据刷新的总体步骤 * 修改模型数据 * 刷新表格(刷新界面) 2> 刷新表格(刷新界面)的方法 * 全局刷新(每一行都会重新刷新) - (void)r ...
- 异常:System.InvalidOperationException: This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms 这个实现是不是Windows平台FIPS验证的加密算法。解决方法
遇见这个问题是在使用了MD5加密算法后报错的,可能的原因如下: 1.FIPS不兼容MD5,此时需要修改注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\C ...
- UVA 11990 ``Dynamic'' Inversion (线段树套BIT,分治)
题目要求可转化为查询一个区间内有多少数比val大(或者小). 区间用线段树分解(logN),每个区间维护一rank树. rank可用BIT查询,往BIT里面插值,为了保证不同区间的BIT互不影响要先离 ...
- Android(java)学习笔记98:如何让你的GridView不再滚动
1. 如何让你的GridView不再滚动: GridView显示不完整的原因是因为,他的外层也套用了一个滑动的控件,这个解决办法是:重写GridView,是控制GridView不能滚动,就是写一个类继 ...
- 【洛谷4657】[CEOI2017] Chase(一个玄学的树形DP)
点此看题面 大致题意: 有一棵树,树上编号为\(i\)的节点上有\(F_i\)个铁球,逃亡者有\(V\)个磁铁,当他在某个节点放下磁铁时,与这个节点相邻的所有节点上的铁球都会被吸引到这个节点.然后一个 ...
- RxJava2 方法总结
RxJava2 方法总结 看了许多讲解RxJava的文章,有些文章讲解的内容是基于第一个版本的,有些文章的讲解是通过比较常用的一些API和基础的概念进行讲解的. 但是每次看到RxJava的类中的几十个 ...
- javaweb基础(34)_jdbc处理mysql大数据
一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...