MD5加密算法的研究及应用_魏晓玲

MD5加密算法的研究及应用_魏晓玲
MD5加密算法的研究及应用_魏晓玲

中图分类号:T P311 文献标识码:A 文章编号:1009-2552(2010)07-0145-03

M D5加密算法的研究及应用

魏晓玲

(延安大学计算中心,延安716000)

摘 要:针对当前网站建设和系统开发中用户信息等重要数据的安全问题,提出了一种M D5加密算法,可以对用户密码进行加密。M D5加密算法是一种比较常用的单向加密算法,通过对该算法的深入研究,介绍了M D5算法的特性、算法原理及其算法流程,并给出M D5算法在一个具体系统中的实际应用,得出M D5算法是一种非常安全和易用的加密算法。

关键词:M D5;加密方式;加密算法;应用

R e s e a r c ha n da p p l i c a t i o n o f MD5e n c r y p t i o na l g o r i t h m

WE I X i a o-l i n g

(C o mp u t e r C e n t e r o f Y a n'a nU n i v e r s i t y,Y a n'a n716000,C h i n a)

A b s t r a c t:F o r t h e s a f e t y p r o b l e mo f i m p o r t a n t d a t a i n w e b s i t e c o n s t r u c t i o na n ds y s t e m d e v e l o p m e n t a t

p r e s e n t,s u c h a s u s e r i n f o r m a t i o n,a M D5e n c r y p t i o n a l g o r i t h m t h a t c a ne n c r y p t u s e r p a s s w o r d s i s p u t

f o r w a r d.A s a o n e-w a ye n c r y p t i o na l

g o r i t

h m,M D5e n c r y p t

i o na l g o r i t h m i s o f t e nu s e d.I nt h i s p a p e r,

f i r s t l y,o n t h e b a s i s o f d e e p s t u d y o n t h e a l

g o r i t

h m,t h e c h a r a c t e r

i s t i c s,a l g o r i t h mt h e o r y a n da l g o r i t h m

f l o wo f M D5a r ei n t r o d u c e d.S e c o n d l y,t h er e a l a p p l i c a t i o no f M D5a l

g o r i t

h m

i s g i v e ni na s p e c i f i c

s y s t e m.F i n a l l y,ac o n c l u s i o ni s d r a w nt h a t M D5a l g o r i t h m i s av e r y s a f e a n de a s y t ou s e e n c r y p t i o n

a l g o r i t h m.

K e y w o r d s:M D5;e n c r y p t i o n m e t h o d;e n c r y p t i o n a l g o r i t h m;a p p l i c a t i o n

0 引言

随着计算机技术和网络技术的广泛应用,很多单位都建立了自己的网站。但这些单位在得益于网络的同时,数据的安全性和自身的利益也受到了严重的威胁。在一般情况下用户的资料信息是保存在数据库中,如果没有对数据库采取任何形式的保密措施,对于一些文件型数据库比如A c c e s s等,如果有人得到这个文件,那所有的资料都将泄露。所以为了增加数据库的安全性,有必要对数据库中的资料进行加密,这样即使有人得到了整个数据库,如果没有解密算法,同样是不能查看数据库中的用户信息。现在最常用的加密方法就是在用户注册时对用户提交的信息进行加密。本文目的是介绍M D5加密算法的实现原理,同时给出M D5具体的应用实例,从而更好的了解M D5算法的实现原理及应用。 1 加密方式分类

加密方式可以分为单向加密和双向加密。双向加密是最常用的加密算法,它的原理是将能直接理解的明文数据加密为不能理解的密文数据,然后在需要解密的时候,可以利用一定的解密算法将这些加密以后的密文再解密为原来可以理解的明文,双向加密一般应用于隐秘通讯[1]。而单向加密只能对数据进行加密,不能将密文解密。在实际应用中的一个最典型的例子就是对数据库中的用户信息进行加密,当用户创建一个新的账号或者密码时,这些信息不是直接保存在数据库中,而是经过加密以后再保存。这样即使这些信息被泄露,也不能理解这些信息的真正含义,因为被泄露的信息是一段

收稿日期:2010-04-15

作者简介:魏晓玲(1974-),女,实验师,在职硕士,主要研究方向为信息系统的开发。

不能解密的密文[2]。

2 M D5算法介绍

2.1 M D5简介

M D5是M e s s a g e-d i g e s t A l g o r i t h m5(信息-摘要算法)的缩写,经M D2、M D3和M D4发展而来。它是把一个任意长度的字节串变换成一定长的大整数。M D5算法是在M D4的基础上增加了“安全-带子”(s a f e t y-b e l t s)的概念。虽然M D5比M D4稍微慢一些,但却更为安全。这个算法很明显的由四个和M D4设计有少许不同的步骤组成。在M D5算法中,信息摘要的大小和填充的必要条件与M D4完全相同。由于M D5算法的使用不需要支付任何版权费用,所以在一般的情况下M D5不失为一种非常优秀的中间技术[3-4]。

2.2 M D5算法原理

M D5算法是对输入信息进行初始化处理后,以512位分组来处理输入的信息,每一分组又被划分成为16个32位子分组,经过了一系列的变换处理后,输出由四个32位分组,再将这四个32位分组级联后生成一个128位散列值[5-6]。

具体过程如下:

(1)首先对信息进行填充,即在信息的后面填充一个1和若干个0使其字节长度对512求余的结果等于448。

(2)对M D5进行初始化,即M D5中用四个32位被称作链接变量的整数参数,它们分别为:A= 0x01234567,B=0x89a b c d e f,C=0x f e d c b a98,D= 0x76543210。

(3)开始进入算法的四轮循环运算。循环的次数是信息中512位信息分组的数目。将上面四个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。主循环有四轮,第一轮进行16次操作。每次操作对a、b、c和d中的其中三个做一次非线性函数运算,然后将所得结果加上第四个变量,再将所得结果向右位移一个不定的数,并加上a、b、c或d 中之一。最后用该结果取代a、b、c或d中之一。

以下是每次操作中用到的四个非线性函数(每轮一个)。

f(x,y,z)=(x&y)((~x)&z)

g(x,y,z)=(x z)(y&(~z))

h(x,y,z)=x y z

i(x,y,z)=y(x(~z))

(其中:“&”是与运算,“”是或运算,“~”是非运算,“ ”是异或运算,它们都是位运算符。)这四个函数的说明:如果x、y和z的对应位是独立和均匀的,那么结果的每一位也应是独立和均匀的。f是一个逐位运算的函数。即,如果x,那么y,否则z。函数h是逐位奇偶操作符。

假设m j表示消息的第j个子分组(从0到15), t i为第I步中的常数,<<

f f(a,b,c,d,m j,s,t i)表示a=b+((a+(f(b,c, d)+m j+t i)<<

g g(a,b,c,d,m j,s,t i)表示a=b+((a+(g(b, c,d)+m j+t i)<<

h h(a,b,c,d,m j,s,t i)表示a=b+((a+(h(b, c,d)+m j+t i)<<

i i(a,b,c,d,m j,s,t i)表示a=b+((a+(i(b,c, d)+m j+t i)<<

常数t i表示在第i步中,t i是4294967296*a b s (s i n(i))的整数部分,4294967296等于2的32次方,i的单位是弧度。所有这些完成之后,将A、B、C、D分别加上a、b、c、d。然后用下一分组数据继续运行算法,最后的输出是A、B、C和D的级联。

3 M D5加密算法的应用

下面给出M D5算法在中国建设银行延安分行的设备管理系统中的具体应用(部分代码)。在这个系统中对M D5算法的应用主要是针对用户的注册登录,用户在注册时所提交的密码信息是利用M D5算法加密之后再保存到数据库中的。这样可以防止用户密码的泄露,既使是管理员也没有办法查看到用户的密码,有效的保护了系统的安全。在用户进行登录时,为了做身份验证,必须对输入的密码重新进行M D5加密运算,然后再与数据库中的信息进行比对,相等便可进入系统。

在本系统中主要是用M D5对用户密码进行加密,实现的相关代码如下:

p u b l i c c l a s s M D5{

......

//F,G,H,I是4个基本的M D5函数

p r i v a t e l o n g F(l o n g x,l o n g y,l o n g z){

r e t u r n(x&a m p;y)((~x)&a m p;z);

}

......

//F F,G G,H H和I I将调用F,G,H,I进行近一步变换

 p r i v a t e l o n g F F(l o n g a,l o n g b,l o n g c,l o n g d,l o n g x,l o n g s,l o n g a c)

{

a+=F(b,c,d)+x+a c;

a=((i n t)a<;>; >;(32-s));

a+=b;

r e t u r n a;

}

......

//m d5I n i t是一个初始化函数,初始化核心变量

p r i v a t e v o i d m d5I n i t(){

c o u n t[0]=0L;

c o u n t[1]=0L;

s t a t e[0]=0x67452301L;

s t a t e[1]=0x e f c d a b89L;

s t a t e[2]=0x98b a d c f e L;

s t a t e[3]=0x10325476L;

r e t u r n;

}

/*m d5T r a n s f o r m是M D5核心变换程序,有m d5U p d a t e调用,b l o c k是分块的原始字节*/

p r i v a t e v o i d m d5T r a n s f o r m(b y t e b l o c k[]){

l o n g a=s t a t e[0],b=s t a t e[1],c= s t a t e[2],d=s t a t e[3];

l o n g[]x=n e wl o n g[16];

D e c o d e(x,b l o c k,64);

a=F F(a,b,c,d,x[0],S11,

0x d76a a478L);

d=F F(d,a,b,c,x[1],S12,

0x e8c7b756L);

c=F F(c,d,a,b,x[2],S13,

0x242070d b L);

b=F F(b,c,d,a,x[3],S14,

0x c1b d c e e e L);

......

s t a t e[0]+=a;

s t a t e[1]+=b;

s t a t e[2]+=c;

s t a t e[3]+=d;

}

/*m d5U p d a t e是M D5的主计算过程,i n b u f是要变换的字节串,i n p u t l e n是长度,这个函数由g e t-M D5o f S t r调用*/

p r i v a t e v o i dm d5U p d a t e(b y t e[]i n b u f,i n t i n p u t L e n){

i n t i,i n d e x,p a r t L e n;

b y t e[]b l o

c k=n e wb y t e[64];

i n d e x=(i n t)(c o u n t[0]>>>3)&a m p;0x3F;

i f((c o u n t[0]+=(i n p u t L e n<<3)) <(i n p u t L e n<<3))

c o u n t[1]++;

c o u n t[1]+=(i n p u t L e n>>>29);

p a r t L e n=64-i n d e x;

i f(i n p u t L e n>=p a r t L e n){

m d5M e m c p y(b u f f e r,i n b u f,i n d e x,0, p a r t L e n);

m d5T r a n s f o r m(b u f f e r);

f o r(i=p a r t L e n;i+63

m d5M e m c p y(b l o c k,i n b u f,0,i, 64);

m d5T r a n s f o r m(b l o c k);

}

i n d e x=0;

}e l s e

i=0;

//m d5M e m c p y是一个内部使用的b y t e数组的块拷贝函数

m d5M e m c p y(b u f f e r,i n b u f,i n d e x,i, i n p u t L e n-i);

}

 //g e t M D5o f S t r是类M D5最主要的公共方法,入口参数是要进行M D5变换的字符串,返回的是变换完的结果

p u b l i c S t r i n g g e t M D5o f S t r(S t r i n g i n b u f){

m d5I n i t();

m d5U p d a t e(i n b u f.g e t B y t e s(),i n b u f. l e n g t h());

m d5F i n a l();//m d5F i n a l整理和填写输出结果

d i g

e s t H e x S t r="";

f o r(i n t i=0;i<16;i++){

d i g

e s t H e x S t r+=b y t e H E X(d i-g e s t[i]);

}

r e t u r n d i g e s t H e x S t r;

}

}

在用户的身份认证中引入M D5算法,对用户信息进行不可逆加密,不同的用户信息拥有不同且唯一的用户加密信息,(下转第151页)

9 另类文件丢失的修复方法

这类故障出现时一般会给出一组C L S I D注册码,而不是告诉用户所损坏或丢失的文件名称,因此经常会让一些初级用户感到不知所措。例如本文在运行窗口中执行“g p e d i t.m s c”命令来打开组策略时曾出现了“管理单元初始化失败”的提示窗口,点击“确定”也不能正常地打开相应的组策略,而经过检查发现是因为丢失了g p e d i t.d l l文件所造成的,虽然窗口中没有提示所丢失的文件,但是在实际解决这类故障时也不是很难。

其实窗口中的C L S I D(C l a s s I D o r i d e n t i f i e r)类标识提示就是一个解决问题的线索,这是因为在注册表中会给每个对象分配一个唯一的标识,这样就可通过在注册表中查找,来获得相关的线索,具体方法如下。

在“运行”窗口中执行“r e g e d i t”命令,然后在打开的注册表窗口中依次点击“编辑※查找”,然后在输入框中输入C L S I D标识(本例中的C L S I D标识是“{8F C0B734-A0E1-11D1-A7D3-0000F87571E3}”),然后在搜索的类标识中选中“I n P r o c S e r v e r32”项,接着在右侧窗口中将双击“默认”项,这时在“数值数据”中会看到“%S y s t e m R o o t%S y s t e m32G P E d i t.

d l l”,其中的G P E d i t.d l l就是本例故障所丢失或损坏的文件。这时只要将安装光盘中的相关文件解压或直接复制到相应的目录中,即可完全修复。

10 解决N T L D R文件丢失

在突然停电或在高版本系统的基础上安装低版本的操作系统时,很容易造成N T L D R文件的丢失,这样在登录系统时就会出现“N T L D R i sM i s s i n g P r e s s a n y k e y t o r e s t a r t”的故障提示,其可在“故障恢复控制台”中进行解决。

进入故障恢复控制台,然后插入W i n d o w s X P安装光盘,接着在故障恢复控制台的命令状态下输入“c o p y x:i386n t l d r c:”命令并回车即可(“x”为光驱所在的盘符),然后执行“c o p y x:i386n t d e t e c t.

c o mc:”命令,如果提示是否覆盖文件,则键入“y”确认,并按回车键。

11 修复受损的B o o t.i n i文件

在遇到N T L D R文件丢失的故障时,b o o t.i n i文件多半也会出现丢失或损坏的情况。这样在进行了上面修复N T L D R的操作后,还要在故障恢复控制台中执行“b o o t c f g/r e d i r e c t”命令来重建B o o t.i n i文件。最后执行“f i x b o o t c:”命令,在提示是否进行操作时输入“y”确认并回车,这样W i n d o w s X P的系统分区便可写入到启动扇区中。当执行完全部命令后,键入“e x i t”命令退出故障恢复控制台,重新启动后系统即可恢复如初。

参考文献:

[1]杨速章,陈静.Wi n d o w s X P操作应用基础[M].人民邮电出版

社,2008.

[2]景凤宣.计算机应用基础—基于Wi n d o w s X P[M].2版.电子工

业出版社,2008.

[3]谢川,朱丰磊,谢川,等.Wi n d o w s网络操作系统[M].高等教育

出版社,2006.

责任编辑:么丽苹

(上接第147页)

即使是有人通过网络窃取或者非法入侵数据库等方式获得了用户的重要信息,也只是加了密的且无法解密的符号,有效的增强了用户信息的安全性。

4 结束语

M D5算法是由M D2、M D3和M D4一步步改进而来。因其算法复杂,M D5在计算速度上做出了适当的牺牲,但就目前普通应用而言,M D5算法还是完全能够胜任的,而且还没有出现新的诸如M D6之类的替代算法,故M D5在今后相当长的一段时间内都还有其广泛的应用价值。实践证明,在网站建设和应用系统的开发过程中通过引入M D5算法,有效的增强了用户重要信息的安全性,M D5加密算法是一种优秀的信息加密算法。

参考文献:

[1]冯登国,裴定一.密码学导引[M].科学出版社,2003.

[2]施卫峰,周俊,等.多用户信息系统中数据安全性控制及其实现

[J].微机发展,2003(13).

[3]孙忠林,赵卫东,等.高级用户权限加密管理技术[J].计算机研

究,2003.

[4]中国信息安全论坛[E B/O L].h t t p://w w w.c h i n a f i r s t.o r g.c n.

[5]杨波.现代密码学[M].北京:清华大学出版社,2003.

[6]H a l l e r N.T h eS/K E Y O n e2T i m eP a s s w o r dS y s t e m[Z].R F C

1760,F e b r u a r y1995.

责任编辑:刘新影

Md5加密算法的原理及应用

Md5加密算法的原理及应用 1.前言Md5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由Mit Laboratory For Computer Science和Rsa Data Security Inc的Ronaldl.rivest 开发出来,经md2、md3和md4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密钥前被 1.前言 Md5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由Mit Laboratory For Computer Science和Rsa Data Security Inc的Ronaldl.rivest开发出来,经md2、md3和md4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式。由于md5算法的使用不需要支付任何版权费用的,所以在一般的情况下,md5也不失为一种非常优秀的加密算法,被大量公司和个人广泛使用。2004年8月17日的美国加州圣巴巴拉的国际密码学会议(Crypto’2004)上,来自中国山东大学的王小云教授做了破译MD5、HAVAL-128、MD4和RIPEMD算法的报告,公布了MD系列算法的破解结果,MD5破解工程权威网站(https://www.360docs.net/doc/018519787.html,)也因此关闭,从此宣布MD5加密算法不再是一种安全的加密算法。 虽然王小云教授公布了破解MD5算法的报告,宣告该算法不再安全,但是对于公司以及普通用户来说,从算法上来破解MD5非常困难,因此MD5仍然算是一种安全的算法。 MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆;所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后,把得到的散列值和原始的数据形成一个一对一的映射表,通过比在表中比破解密码的MD5算法散列值,通过匹配从映射表中找出破解密码所对应的原始明文。 对信息系统或者网站系统来说,MD5算法主要用在用户注册口令的加密,对于普通强度的口令加密,可以通过以下三种方式进行破解: (1)在线查询密码。一些在线的MD5值查询网站提供MD5密码值的查询,输入MD5密码值后,如果在数据库中存在,那么可以很快获取其密码值。 (2)使用MD5破解工具。网络上有许多针对MD5破解的专用软件,通过设置字典来进行破解。 (3)通过社会工程学来获取或者重新设置用户的口令。 因此简单的MD5加密是没有办法达到绝对的安全的,因为普通的MD5加密有多种暴力破解方式,因此如果想要保证信息系统或者网站的安全,需要对MD5进行改造,增强其安全性,本文就是在MD5加密算法的基础上进行改进! 2.Md5算法应用 2.1Md5加密原理

MD5加密算法-c源代码

md5加密算法c实现 七分注释收藏 经常到csdn来是查资料,每次都会有所收获。总是看别人的感觉很不好意思,于是决定自己也写一点东西贡献出来。于是就有了这篇md5七分注释。希望对用到的朋友有所帮助。 记得当初自己刚开始学习md5的时候,从网上搜了很多关于算法的原理和文字性的描述的东西,但是看了很久一直没有搞懂,搜c的源代码又很少。直到后来学习rsa算法的时候,从网上下了1991年的欧洲的什么组织写的关于rsa、des、md5算法的c源代码(各部分代码混在一块的,比如rsa用到的随机大素数就是用机器的随机时间的md5哈希值获得的)。我才彻底把md5弄明白了。这里的代码就是我从那里面分离出来的,代码的效率和可重用性都是很高的。整理了一下希望对需要的朋友能够有帮助。 md5的介绍的文章网上很多,关于md5的来历,用途什么的这里就不再介绍了。这里主要介绍代码。代码明白了就什么都明白了。 //////////////////////////////////////////////////////////////////// /* md5.h */ #ifndef _MD5_H_ #define _MD5_H_ #define R_memset(x, y, z) memset(x, y, z) #define R_memcpy(x, y, z) memcpy(x, y, z) #define R_memcmp(x, y, z) memcmp(x, y, z) typedef unsigned long UINT4; typedef unsigned char *POINTER; /* MD5 context. */ typedef struct { /* state (ABCD) */ /*四个32bits数,用于存放最终计算得到的消息摘要。当消息长度〉512bits时,也用于存放每个512bits的中间结果*/ UINT4 state[4]; /* number of bits, modulo 2^64 (lsb first) */ /*存储原始信息的bits数长度,不包括填充的bits,最长为2^64 bits,因为2^64是一个64位数的最大值*/ UINT4 count[2]; /* input buffer */ /*存放输入的信息的缓冲区,512bits*/ unsigned char buffer[64];

MD5加密算法原理

MD5加密算法原理 MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是MD2、MD4还是MD5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但MD2的设计与MD4和MD5完全不同,那是因为MD2是为8位机器做过设计优化的,而MD4和MD5却是面向32位的电脑。这三个算法的描述和C语言源代码在Internet RFCs 1321中有详细的描述 (https://www.360docs.net/doc/018519787.html,/rfc/rfc1321.txt),这是一份最权威的文档,由Ronald L. Rivest 在1992年8月向IEFT提交。. . Van Oorschot和Wiener曾经考虑过一个在散列中暴力搜寻冲突的函数(Brute-Force Hash Function),而且他们猜测一个被设计专门用来搜索MD5冲突的机器(这台机器在1994年的制造成本大约是一百万美元)可以平均每24天就找到一个冲突。但单从1991年到2001年这10年间,竟没有出现替代MD5算法的MD6或被叫做其他什么名字的新算法这一点,我们就可以看出这个瑕疵并没有太多的影响MD5的安全性。上面所有这些都不足以成为MD5 的在实际应用中的问题。并且,由于MD5算法的使用不需要支付任何版权费用的,所以在一般的情况下(非绝密应用领域。但即便是应用在绝密领域内,MD5也不失为一种非常优秀的中间技术),MD5怎么都应该算得上是非常安全的了。 算法的应用 MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如: MD5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461 这就是tanajiya.tar.gz文件的数字签名。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。如果在以后传播这个文件的过程中,无论文件的内容发生了任何形式的改变(包括人为修改或者下载过程中线路不稳定引起的传输错误等),只要你对这个文件重新计算MD5时就会发现信息摘要不相同,由此可以确定你得到的只是一个不正确的文件。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的"抵赖",这就是所谓的数字签名应用。 MD5还广泛用于加密和解密技术上。比如在UNIX系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。

【2018最新】笔试题目介绍一下MD5加密算法-精选word文档 (2页)

【2018最新】笔试题目介绍一下MD5加密算法-精选word文档 本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除! == 本文为word格式,下载后可方便编辑和修改! == 笔试题目介绍一下MD5加密算法 MD5算法是一种非常优秀的加密算法。 MD5加密算法特点:灵活性、不可恢复性。 介绍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值 在这个字典中检索。

java生成MD5加密

使用Java 生成MD5 编码 MD5即Message-Digest Algorithm 5(信息-摘要算法5),是一种用于产生数字签名的单项散列算法,在1991年由MIT Laboratory for Computer Science(IT计算机科学实验室)和RSA Data Security Inc(RSA数据安全公司)的Ronald L. Rivest教授开发出来,经由MD2、MD3和MD4发展而来。MD5算法的使用不需要支付任何版权费用。它的作用是让大容量信息在用数字签名软件签私人密匙前被"压缩"成一种保密的格式(将一个任意长度的“字节串”通过一个不可逆的字符串变换算法变换成一个128bit的大整数,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。) 在Java 中,java.security.MessageDigest 中已经定义了MD5 的计算,所以我们只需要简单地调用即可得到MD5 的128 位整数。然后将此128 位计16 个字节转换成16 进制表示即可。 代码如下: package com.tsinghua; /** * MD5的算法在RFC1321 中定义 * 在RFC 1321中,给出了Test suite用来检验你的实现是否正确: * MD5 ("") = d41d8cd98f00b204e9800998ecf8427e * MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661 * MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72 * MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0 * MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b * * @author haogj * * 传入参数:一个字节数组 * 传出参数:字节数组的MD5 结果字符串 */ public class MD5 { public static String getMD5(byte[] source) { String s = null; char hexDigits[] = { // 用来将字节转换成16 进制表示的字符 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; try { java.security.MessageDigest md = java.security.MessageDigest.getInstance( "MD5" ); md.update( source ); byte tmp[] = md.digest(); // MD5 的计算结果是一个128 位的长整数, // 用字节表示就是16 个字节 char str[] = new char[16 * 2]; // 每个字节用16 进制表示的话,使用两个字符, // 所以表示成16 进制需要32 个字符 int k = 0; // 表示转换结果中对应的字符位置 for (int i = 0; i < 16; i++) { // 从第一个字节开始,对MD5 的每一个字节

MD5加密与解密

MD5加密与解密算法代码 一:字符串加密: public static String GetMD5(string input) { System.Security.Cryptography.MD5CryptoServiceProvider x=new System.Security.Cryptography.MD5CryptoServiceProvider(); byte[]bs =System.Text.Encoding.UTF8.GetBytes(input); bs =https://www.360docs.net/doc/018519787.html,puteHash(bs); System.Text.StringBuilder s =newSystem.Text.StringBuilder(); foreach(byte b inbs) { s.Append(b.ToString("x2").ToLower()); } returns.ToString(); } public static string GetMD5(string sDataIn) { MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); byte[] bytValue, bytHash; bytValue = System.Text.Encoding.UTF8.GetBytes(sDataIn); bytHash = https://www.360docs.net/doc/018519787.html,puteHash(bytValue); md5.Clear(); string sTemp = ""; for(int i = 0; i < bytHash.Length; i++) { sTemp += bytHash[i].ToString("X").PadLeft(2, '0'); } return sTemp.ToLower(); }

MD5加密解密算法的描述

MD5 算法描述 对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。 在MD5算法中,首先需要对信息进行填充,使其字节长度对512求余的结果等于448。因此,信息的字节长度(Bits Length)将被扩展至N*512+448,即N*64+56个字节(Bytes),N为一个正整数。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。 MD5中有四个32位被称作链接变量(Chaining Variable)的整数参数,他们分别为:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。 当设置好这四个链接变量后,就开始进入算法的四轮循环运算。循环的次数是信息中512位信息分组的数目。

将上面四个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。 主循环有四轮(MD4只有三轮),每轮循环都很相似。第一轮进行16次操作。每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量,文本的一个子分组和一个常数。再将所得结果向右环移一个不定的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。 以一下是每次操作中用到的四个非线性函数(每轮一个)。 F(X,Y,Z) =(X&Y)|((~X)&Z) G(X,Y,Z) =(X&Z)|(Y&(~Z)) H(X,Y,Z) =X^Y^Z I(X,Y,Z)=Y^(X|(~Z)) (&是与,|是或,~是非,^是异或) 这四个函数的说明:如果X、Y和Z的对应位是独立和均匀的,那么结果的每一位也应是独立和均匀的。 F是一个逐位运算的函数。即,如果X,那么Y,否则Z。函数H是逐位奇偶操作符。

MD5加密算法

我们知道,现在网络上一般的网站,稍微完善一点的,往往都需要用户先注册,提供诸如电子邮件、账号、密码等信息以后,成为网站栏目的注册用户,才可以享受网站一些特殊栏目提供的信息或者服务,比如免费电子邮件、论坛、聊天等,都需要用户注册。而对于电子商务网站,比如igo5等大型电子商务网站,用户需要购买商品,就一定需要详细而准确的注册,而这些信息,往往是用户很隐秘的信息,比如电话、电子邮件、地址等,所以,注册信息对于用户和网站都是很重要的资源,不能随意透露,更加不能存在安全上的隐患。 如果我们也设计一个需要用户注册的网站,根据现在的常用技术实现方法,可以在数据库中建立一个用于存放用户信息的表,这个表中至少包括用户账号字段:UserAccount和用户密码字段:Password,当然,实际应用中一个用户信息表不可能就只有这些信息,往往根据网站服务要求,会适当增加一些其他的信息,以方便网站提供更加完善的服务。一般的,一个用户信息占用这个用户信息表的一行也就是一个数据记录,当用户登录或者提交资料的时候,程序将用户填写的信息与表中的信息对照,如果用户账号和密码都准确无误,那么说明这个用户是合法用户,通过注册;反之,则是非法用户,不许通过。 然而,是不是这样就安全了了?是不是这样就能满足网站的注册要求了呢?仔细想想,我们一般将用户资料直接保存在数据库中,并没有进行任何的保密措施,对于一些文件型数据库比如Access等,如果有人得到这个文件,岂不是所有的资料都泄露无疑?更加重要的是,如果一个不负责任的网管,不需要任何技术手段,就可以查看网站中的任何资料,如果我们的用户信息在数据库中没有加密,对于网管而言,查看这些信息是太简单了。所以,为了增加安全性,我们有必要对数据库中的资料进行加密,这样,即使有人得到了整个数据库,如果没有解密算法,也一样不能查看到数据库中的用户信息。但是,在考虑数据库是否安全之前,我们有必要对我们的数据是否真的那么重要进行考虑,如果数据只是简单的一些文件资料,没有保密的必要,显然,没有必要对这些数据进行加密而浪费系统资源、加重程序负担,

MD5算法实现解读

md5加密算法c实现 md5的介绍的文章网上很多,关于md5的来历,用途什么的这里就不再介绍了。这里主要介绍代码。代码明白了就什么都明白了。 //////////////////////////////////////////////////////////////////// /*md5.h*/ #ifndef_MD5_H_ #define_MD5_H_ #defineR_memset(x,y,z)memset(x,y,z) #defineR_memcpy(x,y,z)memcpy(x,y,z) #defineR_memcmp(x,y,z)memcmp(x,y,z) typedefunsignedlongUINT4; typedefunsignedchar*POINTER; /*MD5context.*/ typedefstruct{ /*state(ABCD)*/ /*四个32bits数,用于存放最终计算得到的消息摘要。当消息长度〉512bits时,也用于存放每个512bits的中间结果*/ UINT4state[4]; /*numberofbits,modulo2^64(lsbfirst)*/ /*存储原始信息的bits数长度,不包括填充的bits,最长为2^64bits,因为2^64是一个64位数的最大值*/ UINT4count[2]; /*inputbuffer*/ /*存放输入的信息的缓冲区,512bits*/ unsignedcharbuffer[64]; }MD5_CTX; voidMD5Init(MD5_CTX*); voidMD5Update(MD5_CTX*,unsignedchar*,unsignedint); voidMD5Final(unsignedchar[16],MD5_CTX*); #endif/*_MD5_H_*/

MD5加密算法原理

MD5加密算法原理 MD5的Java Bean实现 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的文本。https://www.360docs.net/doc/018519787.html,/rfc/rfc1321.txt 实现策略 MD5的算法在RFC1321中实际上已经提供了C的实现,我们其实马上就能想到,至少有两种用Java 实现它的方法,第一种是,用Java语言重新写整个算法,或者再说简单点就是把C程序改写成Java程序。第二种是,用JNI(Java Native Interface)来实现,核心算法仍然用这个C程序,用Java类给它包个壳。

MD5简介和算法介绍

MD5破解 文章整理发布:黑客风云文章来源:https://www.360docs.net/doc/018519787.html, 更新时间:2006-3-14 11:57:14 综述 MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是MD2、MD4还是MD5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但MD2的设计与MD4和MD5完全不同,那是因为MD2是为8位机器做过设计优化的,而MD4和MD5却是面向32位的电脑。这三个算法的描述和C语言源代码在Internet RFCs 1321中有详细的描述(https://www.360docs.net/doc/018519787.html,/rfc/rfc1321.txt),这是一份最权威的文档,由Ronald L. Rivest在1992年8月向IEFT提交。 Rivest在1989年开发出MD2算法。在这个算法中,首先对信息进行数据补位,使信息的字节长度是16的倍数。然后,以一个16位的检验和追加到信息末尾。并且根据这个新产生的信息计算出散列值。后来,Rogier和Chauvaud发现如果忽略了检验和将产生MD2冲突。MD2算法的加密后结果是唯一的--既没有重复。 为了加强算法的安全性,Rivest在1990年又开发出MD4算法。MD4算法同样需要填补信息以确保信息的字节长度加上448后能被512整除(信息字节长度mod 512 = 448)。然后,一个以64位二进制表示的信息的最初长度被添加进来。信息被处理成512位Damg?rd/Merkle迭代结构的区块,而且每个区块要通过三个不同步骤的处理。Den Boer和Bosselaers以及其他人很快的发现了攻击MD4版本中第一步和第三步的漏洞。Dobbertin向大家演示了如何利用一部普通的个人电脑在几分钟内找到MD4完整版本中的冲突(这个冲突实际上是一种漏洞,它将导致对不同的内容进行加密却可能得到相同的加密后结果)。毫无疑问,MD4就此被淘汰掉了。 尽管MD4算法在安全上有个这么大的漏洞,但它对在其后才被开发出来的好几种信息

浅谈使用MD5算法加密数据(完整版)

浅谈使用MD5算法加密用户密码 一、引言 最近看了媒体的一篇关于“网络上公开叫卖个人隐私信息”报导,不法分子通过非法手段获得的个人隐私信息,其详细、准确程度简直令人瞠口结舌。在互联网飞速发展的现在,我们不难想到,网络肯定是传播这些个人隐私信息的重要途径之一。 现在网络上一般的网站,只要稍微完善一点的,都需要用户进行注册,提供诸如用户名、用户密码、电子邮件、甚至是电话号码、详细住址等个人隐私信息,然后才可以享受网站提供的一些特殊的信息或者服务。比如电子商务网站,用户需要购买商品,就一定需要提供详细而准确的信息,而这些信息,往往都是用户的隐私信息,比如电子邮件、电话号码、详细住址等。所以,用户注册的信息对于用户和网站来说都是很重要的资源,不能随意公开,当然也不能存在安全上的隐患。 用户注册时,如果将用户资料直接保存在数据库中,而不施加任何的保密措施,对于一些文件型数据库(如Access),如果有人得到这个数据库文件,那这些资料将全部泄露。再有,如果遇到一个不负责任的网管,则不需要任何技术手段,他就可以查看到用户的任何资料。所以,为了增加安全性,我们有必要对数据库中的隐私数据进行加密,这样,即使有人得到了整个数据库,如果没有解密算法,也一样不能查看到用户的隐私信息。但是,在考虑数据库是否安全之前,有必要对这些数据是否真的那么重要进行考虑,如果数据并不重要,则没有保密的必要,否则将会浪费系统资源、加重程序负担。反之,如果数据具有一定的隐私性,则必须进行加密。因此,在考虑加密以前,应该对数据是否需要加密做出选择,以免浪费系统资源或者留下安全隐患。 二、MD5算法简介 MD5算法,即“Message-Digest Algorithm 5(信息-摘要算法)”,它是由MD2、MD3、MD4发展而来的一种单向函数算法,也就是哈希(HASH)算法,是由国际著名的公钥加密算法标准RSA的第一设计者R.Rivest于上个世纪90年代初开发出来的。 加密算法一般有两种,即单向加密算法和双向加密算法。双向加密是加密算法中最常用的,它将可以直接理解的明文数据加密为不可直接理解的密文数据,在需要的时候,又可以使用一定的算法将这些加密以后的密文数据解密为原来的明文数据。双向加密适合于隐秘通

MD5加密原理

MD5加密C#[ZZ] https://www.360docs.net/doc/018519787.html,/Ewangsoft/archive/2006/07/22/960980.aspx 1.来历 MD5的全称是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer science和rsa data security inc的ronald l. rivest开发出来, 经md2、md3和md4发展而来。https://www.360docs.net/doc/018519787.html,/rfc/rfc1321.txt,是一份最权威的文档,由ronald l. rivest在1992年8月向ieft提交。 2.用途 MD5的作用是对一段信息(message)生成信息摘要(message-digest),该摘要对该信息具有 唯一性,可以作为数字签名。用于验证文件的有效性(是否有丢失或损坏的数据),对用户 密码的加密,在哈希函数中计算散列值。 3.特点 输入一个任意长度的字节串,生成一个128位的整数。由于算法的某些不可逆特征,在加密应用 上有较好的安全性。并且,MD5算法的使用不需要支付任何版权费用。 4.说明 唯一性和不可逆性都不是绝对的,从理论上分析是一种多对一的关系,但两个不同的信息产生 相同摘要的概率很小。不可逆是指从输出反推输入所需的运算量和计算时间太大,使用穷搜字 典的方法又需要太多的存储空间。 5.算法描述 算法输入是一个字节串,每个字节是8个bit. 算法的执行分为以下几个步骤: 第一步,补位: MD5算法先对输入的数据进行补位,使得数据的长度(以byte为单位)对64求余的结果是56。即数据扩展至LEN=K*64+56个字节,K为整数。 补位方法:补一个1,然后补0至满足上述要求。相当于补一个0x80的字节,再补值 为0的字节。这一步里总共补充的字节数为0~63个。 第二步,附加数据长度: 用一个64位的整数表示数据的原始长度(以bit为单位),将这个数字的8个字节按低位的在前, 高位在后的顺序附加在补位后的数据后面。这时,数据被填补后的总长度为: LEN = K*64+56+8=(K+1)*64 Bytes。

Md5加密算法的原理及应用

Md5加密算法的原理及应用 1.前言 Md5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由Mit Laboratory For Computer Science和Rsa Data Security Inc的Ronaldl.rivest开发出来,经md2、md3和md4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式。由于md5算法的使用不需要支付任何版权费用的,所以在一般的情况下,md5也不失为一种非常优秀的加密算法,被大量公司和个人广泛使用。2004年8月17日的美国加州圣巴巴拉的国际密码学会议(Crypto’2004)上,来自中国山东大学的王小云教授做了破译MD5、HAVAL-128、MD4和RIPEMD算法的报告,公布了MD系列算法的破解结果,MD5破解工程权威网站(https://www.360docs.net/doc/018519787.html,)也因此关闭,从此宣布MD5加密算法不再是一种安全的加密算法。虽然王小云教授公布了破解MD5算法的报告,宣告该算法不再安全,但是对于公司以及普通用户来说,从算法上来破解MD5非常困难,因此MD5仍然算是一种安全的算法。 MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆;所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后,把得到的散列值和原始的数据形成一个一对一的映射表,通过比在表中比破解密码的MD5算法散列值,通过匹配从映射表中找出破解密码所对应的原始明文。 对信息系统或者网站系统来说,MD5算法主要用在用户注册口令的加密,对于普通强度的口令加密,可以通过以下三种方式进行破解: (1)在线查询密码。一些在线的MD5值查询网站提供MD5密码值的查询,输入MD5密码值后,如果在数据库中存在,那么可以很快获取其密码值。 (2)使用MD5破解工具。网络上有许多针对MD5破解的专用软件,通过设置字典来进行破解。(3)通过社会工程学来获取或者重新设置用户的口令。 因此简单的MD5加密是没有办法达到绝对的安全的,因为普通的MD5加密有多种暴力破解方式,因此如果想要保证信息系统或者网站的安全,需要对MD5进行改造,增强其安全性,本文就是在MD5加密算法的基础上进行改进! 2.Md5算法应用 2.1Md5加密原理 MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。在MD5算法中,首先需要对信息进行填充,使其字节长度对512求余数的结果等于448。因此,信息的字节长度(Bits Length)将被扩展至N*512+448,即N*64+56个字节(Bytes),N为一个正整数。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后再在这个结果后面附加一个以64位二进制表示的填充前的信息长度。经过这两步的处理,现在的信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍数。这样做的原因是为满足后面处理中对信息长度的要求。MD5中有四个32位被称作链接变量(Chaining Variable)的整数参数,他们分别为:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。当设置好这四个链接变量后,就开始进入算法的四轮循环运算,循环的次数是信息中512位信息分组的数目。 将上面四个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。主循环有四轮(MD4只有三轮),每轮循环都很相似。第一轮进行16次操作。每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量(文本中的一个子分组和一个常数)。 再将所得结果向右环移一个不定的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。以一下是每次操作中用到的四个非线性函数(每轮一个)。

MD5加密算法原理及其应用

MD5加密算法原理及其应用 MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆;所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后,把得到的散列值和原始的数据形成一个一对一的映射表,通过比在表中比破解密码的MD5算法散列值,通过匹配从映射表中找出破解密码所对应的原始明文。 对信息系统或者网站系统来说,MD5算法主要用在用户注册口令的加密,对于普通强度的口令加密,可以通过以下三种方式进行破解: (1)在线查询密码。一些在线的MD5值查询网站提供MD5密码值的查询,输入MD5密码值后,如果在数据库中存在,那么可以很快获取其密码值。 (2)使用MD5破解工具。网络上有许多针对MD5破解的专用软件,通过设置字典来进行破解。 (3)通过社会工程学来获取或者重新设置用户的口令。 因此简单的MD5加密是没有办法达到绝对的安全的,因为普通的MD5加密有多种暴力破解方式,因此如果想要保证信息系统或者网站的安全,需要对MD5进行改造,增强其安全性,本文就是在MD5加密算法的基础上进行改进! 2.Md5算法应用 2.1Md5加密原理

MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。 在MD5算法中,首先需要对信息进行填充,使其字节长度对512求余数的结果等于448。因此,信息的字节长度(Bits Length)将被扩展至N*512+448,即N*64+56个字节(Bytes),N为一个正整数。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后再在这个结果后面附加一个以64位二进制表示的填充前的信息长度。经过这两步的处理,现在的信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍数。这样做的原因是为满足后面处理中对信息长度的要求。MD5中有四个32位被称作链接变量(Chaining Variable)的整数参数,他们分别为:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。当设置好这四个链接变量后,就开始进入算法的四轮循环运算,循环的次数是信息中512位信息分组的数目。 将上面四个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。主循环有四轮(MD4只有三轮),每轮循环都很相似。第一轮进行16次操作。每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量(文本中的一个子分组和一个常数)。 再将所得结果向右环移一个不定的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。以一下是每次操作中用到的四个非线性函数(每轮一个)。

MD5加密函数

MD5加密函数 using System.Security.Cryptography; // //MD5加密函数 // public string MD5(String str) { MD5 md5=new MD5CryptoServiceProvider(); byte[] data=System.Text.Encoding.Default.GetBytes(str); byte[] result=https://www.360docs.net/doc/018519787.html,puteHash(data); String ret="";

for(int i=0;i<result.Length;i++) ret+=result[i].ToString("x").PadLeft(2,'0'); return ret; } MS的HELP using System; using System.Security.Cryptography; using System.Text; class Example { // Hash an input string and return the hash as // a 32 character hexadecimal string.

static string getMd5Hash(string input) { // Create a new instance of the MD5CryptoServiceProvider object. MD5 md5Hasher = MD5.Create(); // Convert the input string to a byte array and compute the hash. byte[] data = https://www.360docs.net/doc/018519787.html,puteHash(Encoding.Default.GetBytes(inp ut)); // Create a new Stringbuilder to collect the bytes // and create a string. StringBuilder sBuilder = new StringBuilder(); // Loop through each byte of the hashed data

介绍一下MD5加密算法

介绍一下MD5加密算法 MD5加密算法特点:灵活性、不可恢复性。介绍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密码的例子,这种方法使得管理员和程序设计者都无法看到用户的密码,尽管他们可以初始化它们。但重要的一点是对于用户密码设置习惯的保护。

相关主题