网学网为需要JAVA的朋友们搜集整理了 基于java技术的md5加密算法的设计与实现 相关资料,希望对各位网友有所帮助!
1 MD5算法描述MD5算法可简述为:以512位分组来处理输入字节串的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由4个32位分组组成,将这4个32位分组级联后将生成一个128位散列值在MD5算法中,首先需要对信息进行填充,使其字节长度对512求余的结果等于448.因此,信息的字节长度(Bits Length)将被扩展至N*512+448,即N*64+56个字节(Bytes),N为一个正整数.填充的方法是在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充.然后,在这个结果后面附加一个以64位二进制表示的填充前信息长度.经过这2步的处理,现在的信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍.这样做的原因是为满足后面处理中对信息长度的要求.
MD5中有4个32位被称作链接变量(Chaining Variable)的整数参数,分别为:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210.当设置好这4个链接变量后,就开始进入算法的四轮循环运算.循环的次数是信息中512位信息分组的数目.
将4个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d.主循环有四轮,每轮循环都很相似.第一轮进行16次操作.每次操作对a、b、c和d中的其中3个作一次非线性函数运算,然后将所得结果加上第四个变量,文本的一个子分组和一个常数.再将所得结果向右环移一个不定的数,并加上a、b、c或d中之一.最后用该结果取代a、b、c或d中之一.每次操作中用到的四个非线性函数(每轮一个)分别为F(X,Y,Z) = X&Y|NOT(X)&Z ;G(X,Y,Z) = X&Z|Y&NOT(Z) ;H(X,Y,Z) = X xorY xor Z ;I(X,Y,Z) = Y xor (X|NOT(Z)),其中如果X、Y和Z的对应位是独立和均匀的,那么结果的每一位也应是独立和均匀的.F是一个逐位运算的函数.即,如果X,那么Y,否则Z.函数H是逐位奇偶操作符.
2 JSP和JavaBeanJSP是基于Java体系的WEB开发技术,用于创建跨平台及跨服务器的动态网页[6].与CGI、ASP、PHP等相比,它具有组件和网页设计从逻辑上分离、良好的扩展性和安全性、一次编写,到处运行、强调可重用的组件等优点[7].JavaBean是一种可重用Java组件,它通过封装业务逻辑成为功能对象,实现被JavaApplet/Servelet/JSP等Java程序的调用[8].是目前功能强大及开发简单的最好的组件方式.如果将一些繁琐或者常用的动作,撰写于Bean内,可以达到简化和优化JSP网页结构的目的.如果已有实现某种功能的JavaBean,则创建包含这个功能的Web页面只需要实例化它,再用HTML表格将它定位即可.