/** * Calculates the MD5 checksum. * @authors Mika Palmu * @version 2.0 * * Original Javascript implementation: * RSA Data Security, Inc. MD5 Message Digest Algorithm, as defined in RFC 1321. * Version 2.1 Copyright Paul Johnston 1999 - 2002 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * See http://pajhome.org.uk/crypt/md5 for more info. */ class com.meychi.ascrypt.MD5 { /** * Calculates the MD5 checksum. */ public static function calculate(src:String):String { return hex_md5(src); } /** * Private methods. */ private static function hex_md5(src:String):String { return binl2hex(core_md5(str2binl(src), src.length*8)); } private static function core_md5(x:Array, len:Number):Array { x[len >> 5] |= 0x80 << ((len)%32); x[(((len+64) >>> 9) << 4)+14] = len; var a:Number = 1732584193, b:Number = -271733879; var c:Number = -1732584194, d:Number = 271733878; for (var i:Number = 0; i>> (32-cnt)); } private static function safe_add(x:Number, y:Number):Number { var lsw:Number = (x & 0xFFFF)+(y & 0xFFFF); var msw:Number = (x >> 16)+(y >> 16)+(lsw >> 16); return (msw << 16) | (lsw & 0xFFFF); } private static function str2binl(str:String):Array { var bin:Array = new Array(); var mask:Number = (1 << 8)-1; for (var i:Number = 0; i> 5] |= (str.charCodeAt(i/8) & mask) << (i%32); } return bin; } private static function binl2hex(binarray:Array):String { var str:String = new String(""); var tab:String = new String("0123456789abcdef"); for (var i:Number = 0; i> 2] >> ((i%4)*8+4)) & 0xF) + tab.charAt((binarray[i >> 2] >> ((i%4)*8)) & 0xF); } return str; } }