/** * @function :MD5 * * @author :Makenna * * @date : 2014-4-10 */ package { public class Md5Util{ public function Md5Util(){} public static var hexcase:Number = 0; public static var b64pad:String = ""; public static var chrsz:Number = 8; public static function calculate(s:*):*{ return hex_md5(s); }; public static function hex_hmac_md5(key:*, data:*):*{ return binl2hex(core_hmac_md5(key, data)); } public static function b64_hmac_md5(key:*, data:*):*{ return binl2b64(core_hmac_md5(key, data)); } public static function str_hmac_md5(key:*, data:*):*{ return binl2str(core_hmac_md5(key, data)); } private static function hex_md5(s:*):*{ return binl2hex(core_md5(str2binl(s), s.length*chrsz)); } private static function b64_md5(s:*):*{ return binl2b64(core_md5(str2binl(s), s.length*chrsz)); } private static function str_md5(s:*):*{ return binl2str(core_md5(str2binl(s), s.length*chrsz)); } private static function core_md5(x:*,len:*):* { x[len >> 5] |= 0x80 << ((len)%32); x[(((len+64) >>> 9) << 4)+14] = len; var a:* = 1732584193; var b:* = -271733879; var c:* = -1732584194; var d:* = 271733878; for (var i:* = 0; i>> (32-cnt)); } private static function safe_add(x:*,y:*):*{ var lsw:* = (x & 0xFFFF)+(y & 0xFFFF); var msw:* = (x >> 16)+(y >> 16)+(lsw >> 16); return (msw << 16) | (lsw & 0xFFFF); } private static function str2binl(str:*):*{ var bin:Array = new Array(); var mask:* = (1 << chrsz)-1; for (var i:int = 0; i> 5] |= (str[(i/chrsz)] & mask) << (i%32); return bin; } private static function binl2hex(binarray:*):*{ var hex_tab:String = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; var str:String = ""; for (var i:int = 0; i> 2] >> ((i%4)*8+4)) & 0xF)+hex_tab.charAt((binarray[i >> 2] >> ((i%4)*8)) & 0xF); } return str; } private static function core_hmac_md5(key:*,data:*):*{ var bkey:* = str2binl(key); if (bkey.length>16) bkey = core_md5(bkey, key.length*chrsz); var ipad:* = new Array(16) var opad:* = new Array(16); for (var i:int = 0; i<16; i++) { ipad = bkey ^ 0x36363636; opad = bkey ^ 0x5C5C5C5C; } var hash:* = core_md5(ipad.concat(str2binl(data)), 512+data.length*chrsz); return core_md5(opad.concat(hash), 512+128); } private static function binl2str(bin:*):*{ var str:String = ""; var mask:* = (1 << chrsz)-1; for (var i:int = 0; i> 5] >>> (i%32)) & mask); return str; } private static function binl2b64(binarray:*):*{ var tab:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var str:String = ""; for (var i:int = 0; i> 2] >> 8*(i%4)) & 0xFF) << 16) | (((binarray[i+1 >> 2] >> 8*((i+1)%4)) & 0xFF) << 8) | ((binarray[i+2 >> 2] >> 8*((i+2)%4)) & 0xFF); for (var j:int = 0; j<4; j++) { if (i*8+j*6>binarray.length*32) str += b64pad; else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F); } }return str; } } }