<b>关于MD5的一些知识</b>[VC/C++编程]
本文“<b>关于MD5的一些知识</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
MD5简介
MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实行室和RSA Data Security Inc创造,经MD2、MD3和MD4发展而来.
Message-Digest泛指字节串(Message)的Hash变更,就是把一个肆意长度的字节串变更成一定长的大整数.请注意我利用了“字节串”而不是“字符串”这个词,是因为这种变更只与字节的值有关,与字符集或编码方法无关.
MD5将肆意长度的“字节串”变更成一个128bit的大整数,并且它是一个不可逆的字符串变更算法,换句话说就是,即便你看到源程序和算法描写,也无法将一个MD5的值变更回原始的字符串,从数学原理上说,是因为原始的字符串有没有穷多个,这有点象不存在反函数的数学函数.
MD5的典型利用是对一段Message(字节串)产生fingerprint(指纹),以避免被“篡改”.举个例子,你将一段话写在一个叫readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传达这个文件给别人,别人假如改正了文件中的任何内容,你对这个文件重新计算MD5时就会发现.假如再有一个第三方的认证机构,用MD5还可以避免文件作者的“抵赖”,这就是所谓的数字签名利用.
MD5还遍及用于加密和解密技术上,在很多操作系统中,用户的密码是以MD5值(或近似的别的算法)的方法保存的, 用户Login的时刻,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值举行对比,而系统并不“知道”用户的密码是什么.
一些黑客破获这种密码的办法是一种被称为“跑字典”的办法.有两种办法得到字典,一种是平常汇集的用做密码的字符串表,另一种是用布列组合办法生成的,先用MD5程序计算出这些字典项的MD5值,然后再用目标的MD5值在这个字典中检索.
即便假定密码的最大长度为8,同时密码只能是字母和数字,共26+26+10=62个字符,布列组合出的字典的项数则是P(62,1)+P(62,2)….+P(62,8),那也已经是一个很天文的数字了,存储这个字典就需求TB级的磁盘组,并且这种办法还有一个前提,就是能得到目标账户的密码MD5值的情形下才可以.
在很多电子商务和社区利用中,管理用户的Account是一种最常用的基本功效,固然很多Application Server供应了这些基本组件,但很多利用开辟者为了管理的更大的机动性还是喜好采取关系数据库来管理用户,怠惰的做法是用户的密码常常利用明文或简单的变更后直接保存在数据库中,因此这些用户的密码对软件开辟者或系统管理员来说可以说毫无保密可言,本文的目的是介绍MD5的Java Bean的实现,同时给出用MD5来处理用户的Account密码的例子,这种办法使得管理员和程序计划者都无法看到用户的密码,固然他们可以初始化它们.但重要的一点是关于用户密码设置习惯的保护.
有爱好的读者可以从这里获得MD5也就是RFC 1321的文本.
http://www.ietf.org/rfc/rfc1321.txt
//------------------------------------------------------------------
MD5算法阐明
1、补位
2、补数据长度
3、初始化MD5参数
4、处理位操作函数
5、主要变更历程
6、输出后果
补位:
MD5算法先对输入的数据举行补位,使得数据位长度LEN对512求余的后果是448.即数据扩大至K*512+448位.即K*64+56个字节,K为整数.
具体补位操作:补一个1,然后补0至满意上述要求.
补数据长度:
用一个64位的数字表示数据的原始长度B,把B用两个32位数表示.这时,数据就被弥补生长度为512位的倍数.
初始化MD5参数:
四个32位整数 (A,B,C,D) 用来计算信息择要,初始化利用的是十六进制表示的数字
A=0X01234567
B=0X89abcdef
C=0Xfedcba98
D=0X76543210
以上是“<b>关于MD5的一些知识</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |