关于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下载链接

注意:

    MD5_CTX md5;
    MD5Init(&md5);                          //初始化用于md5加密的结构
    MD5Update(&md5,encrypt,strlen((char *)encrypt));   //对欲加密的字符进行加密
    MD5Final(decrypt,&md5);                            //获得最终结果

这三步一定要成组合出现,若是哪次生成校验码的过程中少了任意一步,都会导致错误(尤其MD5Init(&md5);这句是将md5初始化,如果不初始化,生成的校验码将会不同!!!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值