关于MD5消息摘要算法加密校验及相关问题
MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。
目前接触到MD5主要是涉及到网络数据传输的安全性(检测数据是否被篡改),关于传递的数据有如下想法:
将原数据通过MD5生成校验码,
将原数据加密,
将校验码与加密后的数据传送给目标,
目标接收后,取出校验码,将加密的数据通过秘钥解密,
将解密后的数据通过MD5生成校验码,
比较两次校验码是否一致以此判断数据是否被篡改。
下面演示一下MD5生成校验码
#include "E:\\截图、文档、工具\\文档\\MD5\\MD5.h"
#include "E:\\截图、文档、工具\\文档\\MD5\\MD5.cpp"
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
MD5_CTX md5;
MD5Init(&md5); //初始化用于md5加密的结构
unsigned char decrypt[16]; //存放加密后的结果
unsigned char encrypt[200]="Baidu"; //存放于加密的信息
MD5Update(&md5,encrypt,strlen((char *)encrypt)); //对欲加密的字符进行加密
MD5Final(decrypt,&md5); //获得最终结果
printf("加密前:%s\n加密后:",encrypt);
for(int i=0;i<16;i++)
printf("%x ",decrypt[i]);
printf("\n");
MD5Init(&md5); //每次使用前必须初始化md5
unsigned char encrypt1[200]="Baidu";
/*printf("请输入待加密的字符串\n");
gets((char *)encrypt1);*/
MD5Update(&md5,encrypt1,strlen((char *)encrypt1)); //对欲加密的字符进行加密
MD5Final(decrypt,&md5); //获得最终结果
printf("加密前:%s\n加密后:",encrypt1);
for(int i=0;i<16;i++)
printf("%x ",decrypt[i]);
printf("\n");
MD5Init(&md5);
unsigned char encrypt2[200]={0};
printf("请输入待加密的字符串\n");
gets((char *)encrypt2);
MD5Update(&md5,encrypt2,strlen((char *)encrypt2)); //对欲加密的字符进行加密
MD5Final(decrypt,&md5); //获得最终结果
for(int i=0;i<16;i++)
printf("%x ",decrypt[i]);
printf("\n");
return 0;
}
这时运行结果
通过代码会发现对"Baidu"这个字符串的三次操作都生成的是同样的校验码.这说明MD5确实是值得信赖的!下面附带MD5下载链接
注意:
MD5_CTX md5;
MD5Init(&md5); //初始化用于md5加密的结构
MD5Update(&md5,encrypt,strlen((char *)encrypt)); //对欲加密的字符进行加密
MD5Final(decrypt,&md5); //获得最终结果
这三步一定要成组合出现,若是哪次生成校验码的过程中少了任意一步,都会导致错误(尤其MD5Init(&md5);这句是将md5初始化,如果不初始化,生成的校验码将会不同!!!)
上一篇: Python学习:批量更改文件名
下一篇: Java编程基础:MD5加密算法开发实例
推荐阅读