Flex 中使用MD5类

ContractedBlock.gif ExpandedBlockStart.gif 代码-MD5类
 
   
/*
* 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 ExpandedBlockStart.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 >

 


转载于:https://www.cnblogs.com/TsengYuen/archive/2011/01/11/1932596.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值