/*
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
* Digest Algorithm, as defined in RFC 1321.
* Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
* Distributed under the BSD License
* See http://pajhome.org.uk/crypt/md5 for more info.
*//*
* Configurable variables. You may need to tweak these to be compatible with
* the server-side, but the defaults work in most cases.
*/var hexcase =0;/* hex output format. 0 - lowercase; 1 - uppercase */var b64pad ="";/* base-64 pad character. "=" for strict RFC compliance */var chrsz =8;/* bits per input character. 8 - ASCII; 16 - Unicode *//*
* These are the functions you'll usually want to call
* They take string arguments and return either hex or base-64 encoded strings
*/functionhex_md5(s){
returnbinl2hex(core_md5(str2binl(s), s.length * chrsz));}functionb64_md5(s){
returnbinl2b64(core_md5(str2binl(s), s.length * chrsz));}functionstr_md5(s){
returnbinl2str(core_md5(str2binl(s), s.length * chrsz));}functionhex_hmac_md5(key, data){
returnbinl2hex(core_hmac_md5(key, data));}functionb64_hmac_md5(key, data){
returnbinl2b64(core_hmac_md5(key, data));}functionstr_hmac_md5(key, data){
returnbinl2str(core_hmac_md5(key, data));}/*
* Perform a simple self-test to see if the VM is working
*/functionmd5_vm_test(){
returnhex_md5("abc")=="900150983cd24fb0d6963f7d28e17f72";}/*
* Calculate the MD5 of an array of little-endian words, and a bit length
*/functioncore_md5(x, len){
/* append padding */
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 < x.length; i +=16){
var olda = a;var oldb = b;var oldc = c;var oldd = 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