![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
/*
* MD5加密算法类
* @author wangbaoxue
*/
package util
{
public class MD5
{
private var hexcase: int = 0 ;
private var strsize: int = 8 ;
public function getMD5(s:String):String
{
return binl2hex(core_md5(str2binl(s), s.length * strsize));
}
private function core_md5(x:Array, len: int ):Array
{
x[len >> 5 ] = (x[len >> 5 ]) | ( 128 << len % 32 );
x[(((len + 64 ) >>> 9 ) << 4 ) + 14 ] = len;
var a: int = 1732584193 ;
var b: int = - 271733879 ;
var c: int = - 1732584194 ;
var d: int = 271733878 ;
var i: int = 0 ;
while (i < x.length)
{
var olda: int = a;
var oldb: int = b;
var oldc: int = c;
var oldd: int = d;
a = md5_ff(a, b, c, d, x[i + 0 ], 7 , - 680876936 );
d = md5_ff(d, a, b, c, x[i + 1 ], 12 , - 389564586 );
c = md5_ff(c, d, a, b, x[i + 2 ], 17 , 606105819 );
b = md5_ff(b, c, d, a, x[i + 3 ], 22 , - 1044525330 );
a = md5_ff(a, b, c, d, x[i + 4 ], 7 , - 176418897 );
d = md5_ff(d, a, b, c, x[i + 5 ], 12 , 1200080426 );
c = md5_ff(c, d, a, b, x[i + 6 ], 17 , - 1473231341 );
b = md5_ff(b, c, d, a, x[i + 7 ], 22 , - 45705983 );
a = md5_ff(a, b, c, d, x[i + 8 ], 7 , 1770035416 );
d = md5_ff(d, a, b, c, x[i + 9 ], 12 , - 1958414417 );
c = md5_ff(c, d, a, b, x[i + 10 ], 17 , - 42063 );
b = md5_ff(b, c, d, a, x[i + 11 ], 22 , - 1990404162 );
a = md5_ff(a, b, c, d, x[i + 12 ], 7 , 1804603682 );
d = md5_ff(d, a, b, c, x[i + 13 ], 12 , - 40341101 );
c = md5_ff(c, d, a, b, x[i + 14 ], 17 , - 1502002290 );
b = md5_ff(b, c, d, a, x[i + 15 ], 22 , 1236535329 );
a = md5_gg(a, b, c, d, x[i + 1 ], 5 , - 165796510 );
d = md5_gg(d, a, b, c, x[i + 6 ], 9 , - 1069501632 );
c = md5_gg(c, d, a, b, x[i + 11 ], 14 , 643717713 );
b = md5_gg(b, c, d, a, x[i + 0 ], 20 , - 373897302 );
a = md5_gg(a, b, c, d, x[i + 5 ], 5 , - 701558691 );
d = md5_gg(d, a, b, c, x[i + 10 ], 9 , 38016083 );
c = md5_gg(c, d, a, b, x[i + 15 ], 14 , - 660478335 );
b = md5_gg(b, c, d, a, x[i + 4 ], 20 , - 405537848 );
a = md5_gg(a, b, c, d, x[i + 9 ], 5 , 568446438 );
d = md5_gg(d, a, b, c, x[i + 14 ], 9 , - 1019803690 );
c = md5_gg(c, d, a, b, x[i + 3 ], 14 , - 187363961 );
b = md5_gg(b, c, d, a, x[i + 8 ], 20 , 1163531501 );
a = md5_gg(a, b, c, d, x[i + 13 ], 5 , - 1444681467 );
d = md5_gg(d, a, b, c, x[i + 2 ], 9 , - 51403784 );
c = md5_gg(c, d, a, b, x[i + 7 ], 14 , 1735328473 );
b = md5_gg(b, c, d, a, x[i + 12 ], 20 , - 1926607734 );
a = md5_hh(a, b, c, d, x[i + 5 ], 4 , - 378558 );
d = md5_hh(d, a, b, c, x[i + 8 ], 11 , - 2022574463 );
c = md5_hh(c, d, a, b, x[i + 11 ], 16 , 1839030562 );
b = md5_hh(b, c, d, a, x[i + 14 ], 23 , - 35309556 );
a = md5_hh(a, b, c, d, x[i + 1 ], 4 , - 1530992060 );
d = md5_hh(d, a, b, c, x[i + 4 ], 11 , 1272893353 );
c = md5_hh(c, d, a, b, x[i + 7 ], 16 , - 155497632 );
b = md5_hh(b, c, d, a, x[i + 10 ], 23 , - 1094730640 );
a = md5_hh(a, b, c, d, x[i + 13 ], 4 , 681279174 );
d = md5_hh(d, a, b, c, x[i + 0 ], 11 , - 358537222 );
c = md5_hh(c, d, a, b, x[i + 3 ], 16 , - 722521979 );
b = md5_hh(b, c, d, a, x[i + 6 ], 23 , 76029189 );
a = md5_hh(a, b, c, d, x[i + 9 ], 4 , - 640364487 );
d = md5_hh(d, a, b, c, x[i + 12 ], 11 , - 421815835 );
c = md5_hh(c, d, a, b, x[i + 15 ], 16 , 530742520 );
b = md5_hh(b, c, d, a, x[i + 2 ], 23 , - 995338651 );
a = md5_ii(a, b, c, d, x[i + 0 ], 6 , - 198630844 );
d = md5_ii(d, a, b, c, x[i + 7 ], 10 , 1126891415 );
c = md5_ii(c, d, a, b, x[i + 14 ], 15 , - 1416354905 );
b = md5_ii(b, c, d, a, x[i + 5 ], 21 , - 57434055 );
a = md5_ii(a, b, c, d, x[i + 12 ], 6 , 1700485571 );
d = md5_ii(d, a, b, c, x[i + 3 ], 10 , - 1894986606 );
c = md5_ii(c, d, a, b, x[i + 10 ], 15 , - 1051523 );
b = md5_ii(b, c, d, a, x[i + 1 ], 21 , - 2054922799 );
a = md5_ii(a, b, c, d, x[i + 8 ], 6 , 1873313359 );
d = md5_ii(d, a, b, c, x[i + 15 ], 10 , - 30611744 );
c = md5_ii(c, d, a, b, x[i + 6 ], 15 , - 1560198380 );
b = md5_ii(b, c, d, a, x[i + 13 ], 21 , 1309151649 );
a = md5_ii(a, b, c, d, x[i + 4 ], 6 , - 145523070 );
d = md5_ii(d, a, b, c, x[i + 11 ], 10 , - 1120210379 );
c = md5_ii(c, d, a, b, x[i + 2 ], 15 , 718787259 );
b = md5_ii(b, c, d, a, x[i + 9 ], 21 , - 343485551 );
a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
i = i + 16 ;
}
return new Array(a, b, c, d);
}
private function md5_cmn(q: int , a: int , b: int , x: int , s: int , t: int ) : int
{
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
}
private function md5_ff(a: int , b: int , c: int , d: int , x: int , s: int , t: int ) : int
{
return md5_cmn((b & c) | (( ~ b) & d), a, b, x, s, t);
}
private function md5_gg(a: int , b: int , c: int , d: int , x: int , s: int , t: int ) : int
{
return md5_cmn((b & d) | (c & ( ~ d)), a, b, x, s, t);
}
private function md5_hh(a: int , b: int , c: int , d: int , x: int , s: int , t: int ) : int
{
return md5_cmn((b ^ c) ^ d, a, b, x, s, t);
}
private function md5_ii(a: int , b: int , c: int , d: int , x: int , s: int , t: int ) : int
{
return md5_cmn(c ^ (b | ( ~ d)), a, b, x, s, t);
}
private function safe_add(x: int , y: int ): int
{
var lsw: int = (x & 65535 ) + (y & 65535 );
var msw: int = ((x >> 16 ) + (y >> 16 )) + (lsw >> 16 );
return (msw << 16 ) | (lsw & 65535 );
}
private function bit_rol(num: int , cnt: int ) : int
{
return (num << cnt) | (num >>> ( 32 - cnt));
}
private function str2binl(str:String) :Array
{
var bin:Array = new Array();
var mask: int = ( 1 << strsize) - 1 ;
var i: int = 0 ;
while (i < (str.length * strsize))
{
bin[i >> 5 ] = (bin[i >> 5 ]) | ((str.charCodeAt(i / strsize) & mask) << i % 32 );
i = i + strsize;
}
return bin;
}
private function binl2hex(binarray:Array):String
{
var hex_tab:String = " 0123456789abcdef " ;
var str:String = "" ;
var i: int = 0 ;
while (i < (binarray.length * 4 ))
{
str = str + (hex_tab.charAt(((binarray[i >> 2 ]) >> ((i % 4 * 8 ) + 4 )) & 15 ) + hex_tab.charAt(((binarray[i >> 2 ]) >> (i % 4 * 8 )) & 15 ));
i ++ ;
}
return str;
}
}
}
* MD5加密算法类
* @author wangbaoxue
*/
package util
{
public class MD5
{
private var hexcase: int = 0 ;
private var strsize: int = 8 ;
public function getMD5(s:String):String
{
return binl2hex(core_md5(str2binl(s), s.length * strsize));
}
private function core_md5(x:Array, len: int ):Array
{
x[len >> 5 ] = (x[len >> 5 ]) | ( 128 << len % 32 );
x[(((len + 64 ) >>> 9 ) << 4 ) + 14 ] = len;
var a: int = 1732584193 ;
var b: int = - 271733879 ;
var c: int = - 1732584194 ;
var d: int = 271733878 ;
var i: int = 0 ;
while (i < x.length)
{
var olda: int = a;
var oldb: int = b;
var oldc: int = c;
var oldd: int = d;
a = md5_ff(a, b, c, d, x[i + 0 ], 7 , - 680876936 );
d = md5_ff(d, a, b, c, x[i + 1 ], 12 , - 389564586 );
c = md5_ff(c, d, a, b, x[i + 2 ], 17 , 606105819 );
b = md5_ff(b, c, d, a, x[i + 3 ], 22 , - 1044525330 );
a = md5_ff(a, b, c, d, x[i + 4 ], 7 , - 176418897 );
d = md5_ff(d, a, b, c, x[i + 5 ], 12 , 1200080426 );
c = md5_ff(c, d, a, b, x[i + 6 ], 17 , - 1473231341 );
b = md5_ff(b, c, d, a, x[i + 7 ], 22 , - 45705983 );
a = md5_ff(a, b, c, d, x[i + 8 ], 7 , 1770035416 );
d = md5_ff(d, a, b, c, x[i + 9 ], 12 , - 1958414417 );
c = md5_ff(c, d, a, b, x[i + 10 ], 17 , - 42063 );
b = md5_ff(b, c, d, a, x[i + 11 ], 22 , - 1990404162 );
a = md5_ff(a, b, c, d, x[i + 12 ], 7 , 1804603682 );
d = md5_ff(d, a, b, c, x[i + 13 ], 12 , - 40341101 );
c = md5_ff(c, d, a, b, x[i + 14 ], 17 , - 1502002290 );
b = md5_ff(b, c, d, a, x[i + 15 ], 22 , 1236535329 );
a = md5_gg(a, b, c, d, x[i + 1 ], 5 , - 165796510 );
d = md5_gg(d, a, b, c, x[i + 6 ], 9 , - 1069501632 );
c = md5_gg(c, d, a, b, x[i + 11 ], 14 , 643717713 );
b = md5_gg(b, c, d, a, x[i + 0 ], 20 , - 373897302 );
a = md5_gg(a, b, c, d, x[i + 5 ], 5 , - 701558691 );
d = md5_gg(d, a, b, c, x[i + 10 ], 9 , 38016083 );
c = md5_gg(c, d, a, b, x[i + 15 ], 14 , - 660478335 );
b = md5_gg(b, c, d, a, x[i + 4 ], 20 , - 405537848 );
a = md5_gg(a, b, c, d, x[i + 9 ], 5 , 568446438 );
d = md5_gg(d, a, b, c, x[i + 14 ], 9 , - 1019803690 );
c = md5_gg(c, d, a, b, x[i + 3 ], 14 , - 187363961 );
b = md5_gg(b, c, d, a, x[i + 8 ], 20 , 1163531501 );
a = md5_gg(a, b, c, d, x[i + 13 ], 5 , - 1444681467 );
d = md5_gg(d, a, b, c, x[i + 2 ], 9 , - 51403784 );
c = md5_gg(c, d, a, b, x[i + 7 ], 14 , 1735328473 );
b = md5_gg(b, c, d, a, x[i + 12 ], 20 , - 1926607734 );
a = md5_hh(a, b, c, d, x[i + 5 ], 4 , - 378558 );
d = md5_hh(d, a, b, c, x[i + 8 ], 11 , - 2022574463 );
c = md5_hh(c, d, a, b, x[i + 11 ], 16 , 1839030562 );
b = md5_hh(b, c, d, a, x[i + 14 ], 23 , - 35309556 );
a = md5_hh(a, b, c, d, x[i + 1 ], 4 , - 1530992060 );
d = md5_hh(d, a, b, c, x[i + 4 ], 11 , 1272893353 );
c = md5_hh(c, d, a, b, x[i + 7 ], 16 , - 155497632 );
b = md5_hh(b, c, d, a, x[i + 10 ], 23 , - 1094730640 );
a = md5_hh(a, b, c, d, x[i + 13 ], 4 , 681279174 );
d = md5_hh(d, a, b, c, x[i + 0 ], 11 , - 358537222 );
c = md5_hh(c, d, a, b, x[i + 3 ], 16 , - 722521979 );
b = md5_hh(b, c, d, a, x[i + 6 ], 23 , 76029189 );
a = md5_hh(a, b, c, d, x[i + 9 ], 4 , - 640364487 );
d = md5_hh(d, a, b, c, x[i + 12 ], 11 , - 421815835 );
c = md5_hh(c, d, a, b, x[i + 15 ], 16 , 530742520 );
b = md5_hh(b, c, d, a, x[i + 2 ], 23 , - 995338651 );
a = md5_ii(a, b, c, d, x[i + 0 ], 6 , - 198630844 );
d = md5_ii(d, a, b, c, x[i + 7 ], 10 , 1126891415 );
c = md5_ii(c, d, a, b, x[i + 14 ], 15 , - 1416354905 );
b = md5_ii(b, c, d, a, x[i + 5 ], 21 , - 57434055 );
a = md5_ii(a, b, c, d, x[i + 12 ], 6 , 1700485571 );
d = md5_ii(d, a, b, c, x[i + 3 ], 10 , - 1894986606 );
c = md5_ii(c, d, a, b, x[i + 10 ], 15 , - 1051523 );
b = md5_ii(b, c, d, a, x[i + 1 ], 21 , - 2054922799 );
a = md5_ii(a, b, c, d, x[i + 8 ], 6 , 1873313359 );
d = md5_ii(d, a, b, c, x[i + 15 ], 10 , - 30611744 );
c = md5_ii(c, d, a, b, x[i + 6 ], 15 , - 1560198380 );
b = md5_ii(b, c, d, a, x[i + 13 ], 21 , 1309151649 );
a = md5_ii(a, b, c, d, x[i + 4 ], 6 , - 145523070 );
d = md5_ii(d, a, b, c, x[i + 11 ], 10 , - 1120210379 );
c = md5_ii(c, d, a, b, x[i + 2 ], 15 , 718787259 );
b = md5_ii(b, c, d, a, x[i + 9 ], 21 , - 343485551 );
a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
i = i + 16 ;
}
return new Array(a, b, c, d);
}
private function md5_cmn(q: int , a: int , b: int , x: int , s: int , t: int ) : int
{
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
}
private function md5_ff(a: int , b: int , c: int , d: int , x: int , s: int , t: int ) : int
{
return md5_cmn((b & c) | (( ~ b) & d), a, b, x, s, t);
}
private function md5_gg(a: int , b: int , c: int , d: int , x: int , s: int , t: int ) : int
{
return md5_cmn((b & d) | (c & ( ~ d)), a, b, x, s, t);
}
private function md5_hh(a: int , b: int , c: int , d: int , x: int , s: int , t: int ) : int
{
return md5_cmn((b ^ c) ^ d, a, b, x, s, t);
}
private function md5_ii(a: int , b: int , c: int , d: int , x: int , s: int , t: int ) : int
{
return md5_cmn(c ^ (b | ( ~ d)), a, b, x, s, t);
}
private function safe_add(x: int , y: int ): int
{
var lsw: int = (x & 65535 ) + (y & 65535 );
var msw: int = ((x >> 16 ) + (y >> 16 )) + (lsw >> 16 );
return (msw << 16 ) | (lsw & 65535 );
}
private function bit_rol(num: int , cnt: int ) : int
{
return (num << cnt) | (num >>> ( 32 - cnt));
}
private function str2binl(str:String) :Array
{
var bin:Array = new Array();
var mask: int = ( 1 << strsize) - 1 ;
var i: int = 0 ;
while (i < (str.length * strsize))
{
bin[i >> 5 ] = (bin[i >> 5 ]) | ((str.charCodeAt(i / strsize) & mask) << i % 32 );
i = i + strsize;
}
return bin;
}
private function binl2hex(binarray:Array):String
{
var hex_tab:String = " 0123456789abcdef " ;
var str:String = "" ;
var i: int = 0 ;
while (i < (binarray.length * 4 ))
{
str = str + (hex_tab.charAt(((binarray[i >> 2 ]) >> ((i % 4 * 8 ) + 4 )) & 15 ) + hex_tab.charAt(((binarray[i >> 2 ]) >> (i % 4 * 8 )) & 15 ));
i ++ ;
}
return str;
}
}
}
调用示例:
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1
<
mx:Application
xmlns:mx
="http://www.adobe.com/2006/mxml"
paddingBottom
="0"
2 paddingLeft ="0" paddingRight ="0" paddingTop ="0" modalTransparencyBlur ="0" modalTransparencyColor ="#9a9a9a" >
3 < mx:Script >
4 <![CDATA[
5 import util.MD5;
6 private function getMD5():void
7 {
8 var md5:MD5=new MD5();
9 lblMD5.text=md5.getMD5(txt.text);
10 }
11 ]]>
12 </ mx:Script >
13
14
15 < mx:Canvas styleName ="CavasStyle" width ="100%" height ="100%" >
16 < mx:VBox paddingLeft ="10" >
17
18 < mx:Label id ="lbl" text ="请输入:" />
19 < mx:TextInput id ="txt" width ="200" />
20 < mx:Button id ="btn" label ="得到MD5" click ="getMD5()" />
21 < mx:Label id ="lblMD5" width ="300" />
22 </ mx:VBox >
23 </ mx:Canvas >
24 </ mx:Application >
2 paddingLeft ="0" paddingRight ="0" paddingTop ="0" modalTransparencyBlur ="0" modalTransparencyColor ="#9a9a9a" >
3 < mx:Script >
4 <![CDATA[
5 import util.MD5;
6 private function getMD5():void
7 {
8 var md5:MD5=new MD5();
9 lblMD5.text=md5.getMD5(txt.text);
10 }
11 ]]>
12 </ mx:Script >
13
14
15 < mx:Canvas styleName ="CavasStyle" width ="100%" height ="100%" >
16 < mx:VBox paddingLeft ="10" >
17
18 < mx:Label id ="lbl" text ="请输入:" />
19 < mx:TextInput id ="txt" width ="200" />
20 < mx:Button id ="btn" label ="得到MD5" click ="getMD5()" />
21 < mx:Label id ="lblMD5" width ="300" />
22 </ mx:VBox >
23 </ mx:Canvas >
24 </ mx:Application >