Javascript script to implement static web encryption instance code

  • 2020-03-26 23:01:09
  • OfStack

Javascript script to achieve static webpage encryption, reading Javascript script to achieve static webpage encryption, two days ago saw someone asked the static webpage encryption problem, wrote this code thinking: encryption: first the user's key A with md5 encryption for B, and then use B xor source file S0 to get the target file S1, S1 into js variables. Decryption: asks for the key, then operates with the encryption

Two days ago, I saw someone ask the question of static web page encryption, so I wrote this code

Ideas:

When encrypting: first, the user's key A is encrypted into B with md5, and then the target file S1 is obtained with B xor source file S0, which is stored in js variable.

Decryption: asks for the key, then operates with the encryption.

Because of md5, the individual believes that it is impossible to crack without the key (except for violence).

Try it out haha:

The source code is as follows:


<html>
<head>
<title>Web Encoder</title>
<style>
body {
 font-size:12px;
 line-height:12px;
 background-Color:buttonface;
 border-width:0px;
 overflow:auto;
 margin:0px;
 padding:4px;
}
#t1, #t2 {
 width:100%;
 height:40%;
 border-width:1px;
 overflow:auto;
 height:expression((document.body.clientHeight-100)/2);
}
input {
 border-width:1px;
 padding-left:10px;
 padding-right:10px;
 margin:4px;
}
</style>
<script>
function webEncode(){
 strSource=escape(XOR(t1.value,STR.md5(p1.value)));
 //strSource=t1.value;
 strOut="<script>rnstrHTML="";rn";
 for(var i=0;i+70<strSource.length;i+=70){
  strOut+="strHTML+=""+addSlash(strSource.substring(i,i+70))+"";rn";
 }
 strOut+="strHTML+=""+addSlash(strSource.substring(i,strSource.length))+"";rn";
 strOut+=XOR+"rn";

 //below code load the STR object
 strOut+="var STR =rn{rnthexcase : 0,  /* hex output format. 0 - lowercase; 1 - ";
 strOut+="uppercase        */rntb64pad  : "", /* base-64 pad character. "=" for ";
 strOut+="strict RFC compliance   */rntchrsz   : 8,  /* bits per input character";
 strOut+=". 8 - ASCII; 16 - Unicode      */rntrntb64_hmac_md5:rnttfunction(key, ";
 strOut+="data) { return binl2b64(core_hmac_md5(key, data)); },rnttrntb64_md5:rn";
 strOut+="ttfunction(s){ return binl2b64(core_md5(str2binl(s), s.length * this.c";
 strOut+="hrsz));},rnttrntbinl2b64:rnttfunction(binarray){rntt  var tab = "ABCDE";
 strOut+="FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";rntt  var";
 strOut+=" str = "";rntt  for(var i = 0; i < binarray.length * 4; i += 3)rntt  {";
 strOut+="rntt    var triplet = (((binarray[i   >> 2] >> 8 * ( i   %4)) & 0xFF) ";
 strOut+="<< 16)rntt                | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & ";
 strOut+="0xFF) << 8 )rntt                |  ((binarray[i+2 >> 2] >> 8 * ((i+2)%";
 strOut+="4)) & 0xFF);rntt    for(var j = 0; j < 4; j++)rntt    {rntt      if(i ";
 strOut+="* 8 + j * 6 > binarray.length * 32) str += this.b64pad;rntt      else ";
 strOut+="str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);rntt    }rntt  }rntt  r";
 strOut+="eturn str;rntt},rnttrntbinl2hex:rnttfunction(binarray){rntt  var hex_t";
 strOut+="ab = this.hexcase ? "0123456789ABCDEF" : "0123456789abcdef";rntt  var ";
 strOut+="str = "";rntt  for(var i = 0; i < binarray.length * 4; i++)rntt  {rntt";
 strOut+="    str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +rntt";
 strOut+="           hex_tab.charAt((binarray[i>>2] >> ((i%4)*8  )) & 0xF);rntt ";
 strOut+=" }rntt  return str;rntt},rntrntbinl2str:rnttfunction(bin){rntt  var st";
 strOut+="r = "";rntt  var mask = (1 << this.chrsz) - 1;rntt  for(var i = 0; i <";
 strOut+=" bin.length * 32; i += this.chrsz)rntt    str += String.fromCharCode((";
 strOut+="bin[i>>5] >>> (i % 32)) & mask);rntt  return str;rntt},rnttrntbit_rol:";
 strOut+="rnttfunction(num, cnt){return (num << cnt) | (num >>> (32 - cnt));},rn";
 strOut+="ttrntcore_hmac_md5:rnttfunction(key, data){rntt  var bkey = str2binl(k";
 strOut+="ey);rntt  if(bkey.length > 16) bkey = core_md5(bkey, key.length * this";
 strOut+=".chrsz);rnttrntt  var ipad = Array(16), opad = Array(16);rntt  for(var";
 strOut+=" i = 0; i < 16; i++)rntt  {rntt    ipad[i] = bkey[i] ^ 0x36363636;rntt";
 strOut+="    opad[i] = bkey[i] ^ 0x5C5C5C5C;rntt  }rnttrntt  var hash = core_md";
 strOut+="5(ipad.concat(str2binl(data)), 512 + data.length * this.chrsz);rntt  r";
 strOut+="eturn core_md5(opad.concat(hash), 512 + 128);rntt},rnttrntcore_md5:rnt";
 strOut+="tfunction(x, len){rntt  /* append padding */rntt  x[len >> 5] |= 0x80 ";
 strOut+="<< ((len) % 32);rntt  x[(((len + 64) >>> 9) << 4) + 14] = len;rnttrntt";
 strOut+="  var a =  1732584193;rntt  var b = -271733879;rntt  var c = -17325841";
 strOut+="94;rntt  var d =  271733878;rnttrntt  for(var i = 0; i < x.length; i +";
 strOut+="= 16)rntt  {rntt    var olda = a;rntt    var oldb = b;rntt    var oldc";
 strOut+=" = c;rntt    var oldd = d;rnttrntt    a = this.md5_ff(a, b, c, d, x[i+";
 strOut+=" 0], 7 , -680876936);rntt    d = this.md5_ff(d, a, b, c, x[i+ 1], 12, ";
 strOut+="-389564586);rntt    c = this.md5_ff(c, d, a, b, x[i+ 2], 17,  60610581";
 strOut+="9);rntt    b = this.md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);rntt ";
 strOut+="   a = this.md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);rntt    d = th";
 strOut+="is.md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426);rntt    c = this.md5_f";
 strOut+="f(c, d, a, b, x[i+ 6], 17, -1473231341);rntt    b = this.md5_ff(b, c, ";
 strOut+="d, a, x[i+ 7], 22, -45705983);rntt    a = this.md5_ff(a, b, c, d, x[i+";
 strOut+=" 8], 7 ,  1770035416);rntt    d = this.md5_ff(d, a, b, c, x[i+ 9], 12,";
 strOut+=" -1958414417);rntt    c = this.md5_ff(c, d, a, b, x[i+10], 17, -42063)";
 strOut+=";rntt    b = this.md5_ff(b, c, d, a, x[i+11], 22, -1990404162);rntt   ";
 strOut+=" a = this.md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682);rntt    d = thi";
 strOut+="s.md5_ff(d, a, b, c, x[i+13], 12, -40341101);rntt    c = this.md5_ff(c";
 strOut+=", d, a, b, x[i+14], 17, -1502002290);rntt    b = this.md5_ff(b, c, d, ";
 strOut+="a, x[i+15], 22,  1236535329);rnttrntt    a = this.md5_gg(a, b, c, d, x";
 strOut+="[i+ 1], 5 , -165796510);rntt    d = this.md5_gg(d, a, b, c, x[i+ 6], 9";
 strOut+=" , -1069501632);rntt    c = this.md5_gg(c, d, a, b, x[i+11], 14,  6437";
 strOut+="17713);rntt    b = this.md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);rn";
 strOut+="tt    a = this.md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);rntt    d =";
 strOut+=" this.md5_gg(d, a, b, c, x[i+10], 9 ,  38016083);rntt    c = this.md5_";
 strOut+="gg(c, d, a, b, x[i+15], 14, -660478335);rntt    b = this.md5_gg(b, c, ";
 strOut+="d, a, x[i+ 4], 20, -405537848);rntt    a = this.md5_gg(a, b, c, d, x[i";
 strOut+="+ 9], 5 ,  568446438);rntt    d = this.md5_gg(d, a, b, c, x[i+14], 9 ,";
 strOut+=" -1019803690);rntt    c = this.md5_gg(c, d, a, b, x[i+ 3], 14, -187363";
 strOut+="961);rntt    b = this.md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501);rnt";
 strOut+="t    a = this.md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);rntt    d =";
 strOut+=" this.md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);rntt    c = this.md5_";
 strOut+="gg(c, d, a, b, x[i+ 7], 14,  1735328473);rntt    b = this.md5_gg(b, c,";
 strOut+=" d, a, x[i+12], 20, -1926607734);rnttrntt    a = this.md5_hh(a, b, c, ";
 strOut+="d, x[i+ 5], 4 , -378558);rntt    d = this.md5_hh(d, a, b, c, x[i+ 8], ";
 strOut+="11, -2022574463);rntt    c = this.md5_hh(c, d, a, b, x[i+11], 16,  183";
 strOut+="9030562);rntt    b = this.md5_hh(b, c, d, a, x[i+14], 23, -35309556);r";
 strOut+="ntt    a = this.md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);rntt    d";
 strOut+=" = this.md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353);rntt    c = this.";
 strOut+="md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);rntt    b = this.md5_hh(b,";
 strOut+=" c, d, a, x[i+10], 23, -1094730640);rntt    a = this.md5_hh(a, b, c, d";
 strOut+=", x[i+13], 4 ,  681279174);rntt    d = this.md5_hh(d, a, b, c, x[i+ 0]";
 strOut+=", 11, -358537222);rntt    c = this.md5_hh(c, d, a, b, x[i+ 3], 16, -72";
 strOut+="2521979);rntt    b = this.md5_hh(b, c, d, a, x[i+ 6], 23,  76029189);r";
 strOut+="ntt    a = this.md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);rntt    d ";
 strOut+="= this.md5_hh(d, a, b, c, x[i+12], 11, -421815835);rntt    c = this.md";
 strOut+="5_hh(c, d, a, b, x[i+15], 16,  530742520);rntt    b = this.md5_hh(b, c";
 strOut+=", d, a, x[i+ 2], 23, -995338651);rnttrntt    a = this.md5_ii(a, b, c, ";
 strOut+="d, x[i+ 0], 6 , -198630844);rntt    d = this.md5_ii(d, a, b, c, x[i+ 7";
 strOut+="], 10,  1126891415);rntt    c = this.md5_ii(c, d, a, b, x[i+14], 15, -";
 strOut+="1416354905);rntt    b = this.md5_ii(b, c, d, a, x[i+ 5], 21, -57434055";
 strOut+=");rntt    a = this.md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571);rntt  ";
 strOut+="  d = this.md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);rntt    c = th";
 strOut+="is.md5_ii(c, d, a, b, x[i+10], 15, -1051523);rntt    b = this.md5_ii(b";
 strOut+=", c, d, a, x[i+ 1], 21, -2054922799);rntt    a = this.md5_ii(a, b, c, ";
 strOut+="d, x[i+ 8], 6 ,  1873313359);rntt    d = this.md5_ii(d, a, b, c, x[i+1";
 strOut+="5], 10, -30611744);rntt    c = this.md5_ii(c, d, a, b, x[i+ 6], 15, -1";
 strOut+="560198380);rntt    b = this.md5_ii(b, c, d, a, x[i+13], 21,  130915164";
 strOut+="9);rntt    a = this.md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);rntt  ";
 strOut+="  d = this.md5_ii(d, a, b, c, x[i+11], 10, -1120210379);rntt    c = th";
 strOut+="is.md5_ii(c, d, a, b, x[i+ 2], 15,  718787259);rntt    b = this.md5_ii";
 strOut+="(b, c, d, a, x[i+ 9], 21, -343485551);rnttrntt    a = this.safe_add(a,";
 strOut+=" olda);rntt    b = this.safe_add(b, oldb);rntt    c = this.safe_add(c,";
 strOut+=" oldc);rntt    d = this.safe_add(d, oldd);rntt  }rntt  return Array(a,";
 strOut+=" b, c, d);rntt},rnttrnthex_hmac_md5:function(key, data){ return this.b";
 strOut+="inl2hex(this.core_hmac_md5(key, data)); },rntrnthex_md5:function(s){re";
 strOut+="turn this.binl2hex(this.core_md5(this.str2binl(s), s.length * this.chr";
 strOut+="sz));},rntrntmd5:function(s){return(this.hex_md5(s));},rnrntmd5_cmn:fu";
 strOut+="nction(q, a, b, x, s, t){return this.safe_add(this.bit_rol(this.safe_a";
 strOut+="dd(this.safe_add(a, q), this.safe_add(x, t)), s),b);},rnrntmd5_ff:func";
 strOut+="tion(a, b, c, d, x, s, t){return this.md5_cmn((b & c) | ((~b) & d), a,";
 strOut+=" b, x, s, t);},rnrntmd5_gg:function(a, b, c, d, x, s, t){return this.m";
 strOut+="d5_cmn((b & d) | (c & (~d)), a, b, x, s, t);},rnrntmd5_hh:function(a, ";
 strOut+="b, c, d, x, s, t){return this.md5_cmn(b ^ c ^ d, a, b, x, s, t);},rnrn";
 strOut+="tmd5_ii:function(a, b, c, d, x, s, t){return this.md5_cmn(c ^ (b | (~d";
 strOut+=")), a, b, x, s, t);},rnrntmd5_vm_test:function(){return hex_md5("abc")";
 strOut+=" == "900150983cd24fb0d6963f7d28e17f72";},rntrntsafe_add:rnttfunction(x";
 strOut+=", y){rntt  var lsw = (x & 0xFFFF) + (y & 0xFFFF);rntt  var msw = (x >>";
 strOut+=" 16) + (y >> 16) + (lsw >> 16);rntt  return (msw << 16) | (lsw & 0xFFF";
 strOut+="F);rntt},rnttrntstr2binl:rnttfunction(str){rntt  var bin = Array();rnt";
 strOut+="t  var mask = (1 << this.chrsz) - 1;rntt  for(var i = 0; i < str.lengt";
 strOut+="h * this.chrsz; i += this.chrsz)rntt    bin[i>>5] |= (str.charCodeAt(i";
 strOut+=" / this.chrsz) & mask) << (i%32);rntt  return bin;rntt},rnrntstr_hmac_";
 strOut+="md5:function(key, data){ return binl2str(core_hmac_md5(key, data)); },";
 strOut+="rnrntstr_md5:function(s){ return binl2str(core_md5(str2binl(s), s.leng";
 strOut+="th * this.chrsz));}rn}rn";

 strOut+=performPage+"rn";
 strOut+="performPage();rn";
 strOut+="</script>";
 t2.value=strOut;
}
function runCode(){
 win=open("about:blank");
 win.document.write(t2.value);
 win.document.close();
}
function addSlash(str){
 return(str).replace(/\/g,"\\").replace(///g,"\/").replace(/r/g,"\r").replace(/n/g,"\n").replace(/"/g,"\"").replace(/'/g,"\'").replace(/t/g,"\t");
}
function XOR(strV,strPass){
 var intPassLength=strPass.length;
 var re="";
 for(var i=0;i<strV.length;i++){
  re+=String.fromCharCode(strV.charCodeAt(i)^strPass.charCodeAt(i%intPassLength));
 }
 return(re);
}
function performPage(strPass){
 if(strPass){
  document.cookie="password="+escape(strPass);
  document.write(XOR(unescape(strHTML),STR.md5(strPass)));
  return(false);
 }
 //********** * if you need to remember the password automatically, change the comment below to code
 /*
 var pass=document.cookie.match(/password=([^;]+)/i);
 if(pass){
  pass=unescape(pass[1]);
  document.write(XOR(unescape(strHTML),STR.md5(pass)));
  return(false);
 }
 */
 //*************
 strAskPass="<table cellspacing=0 cellpadding=0 width=100% height=100% align=center valign=middle><tr><td> </td><td align=center>";
 strAskPass+="<b>Password:</b><input style="border-width:1px;" type=password id=ps01 onkeydown="if(event.keyCode==13){performPage(this.value);}">";
 strAskPass+="<input style="border-width:1px;" type=button onclick="performPage(ps01.value);" value=Enter></td><td> </td></tr></table>";
 document.write(strAskPass);
}
var STR =
{
 hexcase : 0,  
 b64pad  : "", 
 chrsz   : 8,  

 b64_hmac_md5:
  function(key, data) { return binl2b64(core_hmac_md5(key, data)); },

 b64_md5:
  function(s){ return binl2b64(core_md5(str2binl(s), s.length * this.chrsz));},

 binl2b64:
  function(binarray){
    var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    var str = "";
    for(var i = 0; i < binarray.length * 4; i += 3)
    {
      var triplet = (((binarray[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 = 0; j < 4; j++)
      {
        if(i * 8 + j * 6 > binarray.length * 32) str += this.b64pad;
        else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
      }
    }
    return str;
  },

 binl2hex:
  function(binarray){
    var hex_tab = this.hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
    var str = "";
    for(var i = 0; i < binarray.length * 4; i++)
    {
      str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
             hex_tab.charAt((binarray[i>>2] >> ((i%4)*8  )) & 0xF);
    }
    return str;
  },

 binl2str:
  function(bin){
    var str = "";
    var mask = (1 << this.chrsz) - 1;
    for(var i = 0; i < bin.length * 32; i += this.chrsz)
      str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
    return str;
  },

 bit_rol:
  function(num, cnt){return (num << cnt) | (num >>> (32 - cnt));},

 core_hmac_md5:
  function(key, data){
    var bkey = str2binl(key);
    if(bkey.length > 16) bkey = core_md5(bkey, key.length * this.chrsz);

    var ipad = Array(16), opad = Array(16);
    for(var i = 0; i < 16; i++)
    {
      ipad[i] = bkey[i] ^ 0x36363636;
      opad[i] = bkey[i] ^ 0x5C5C5C5C;
    }

    var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * this.chrsz);
    return core_md5(opad.concat(hash), 512 + 128);
  },

 core_md5:
  function(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 < x.length; i += 16)
    {
      var olda = a;
      var oldb = b;
      var oldc = c;
      var oldd = d;

      a = this.md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
      d = this.md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
      c = this.md5_ff(c, d, a, b, x[i+ 2], 17,  606105819);
      b = this.md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
      a = this.md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
      d = this.md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426);
      c = this.md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
      b = this.md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
      a = this.md5_ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
      d = this.md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
      c = this.md5_ff(c, d, a, b, x[i+10], 17, -42063);
      b = this.md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
      a = this.md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682);
      d = this.md5_ff(d, a, b, c, x[i+13], 12, -40341101);
      c = this.md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
      b = this.md5_ff(b, c, d, a, x[i+15], 22,  1236535329);

      a = this.md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
      d = this.md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
      c = this.md5_gg(c, d, a, b, x[i+11], 14,  643717713);
      b = this.md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
      a = this.md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
      d = this.md5_gg(d, a, b, c, x[i+10], 9 ,  38016083);
      c = this.md5_gg(c, d, a, b, x[i+15], 14, -660478335);
      b = this.md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
      a = this.md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
      d = this.md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
      c = this.md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
      b = this.md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501);
      a = this.md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
      d = this.md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
      c = this.md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473);
      b = this.md5_gg(b, c, d, a, x[i+12], 20, -1926607734);

      a = this.md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
      d = this.md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
      c = this.md5_hh(c, d, a, b, x[i+11], 16,  1839030562);
      b = this.md5_hh(b, c, d, a, x[i+14], 23, -35309556);
      a = this.md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
      d = this.md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353);
      c = this.md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
      b = this.md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
      a = this.md5_hh(a, b, c, d, x[i+13], 4 ,  681279174);
      d = this.md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
      c = this.md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
      b = this.md5_hh(b, c, d, a, x[i+ 6], 23,  76029189);
      a = this.md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
      d = this.md5_hh(d, a, b, c, x[i+12], 11, -421815835);
      c = this.md5_hh(c, d, a, b, x[i+15], 16,  530742520);
      b = this.md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);

      a = this.md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
      d = this.md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415);
      c = this.md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
      b = this.md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
      a = this.md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571);
      d = this.md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
      c = this.md5_ii(c, d, a, b, x[i+10], 15, -1051523);
      b = this.md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
      a = this.md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
      d = this.md5_ii(d, a, b, c, x[i+15], 10, -30611744);
      c = this.md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
      b = this.md5_ii(b, c, d, a, x[i+13], 21,  1309151649);
      a = this.md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
      d = this.md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
      c = this.md5_ii(c, d, a, b, x[i+ 2], 15,  718787259);
      b = this.md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);

      a = this.safe_add(a, olda);
      b = this.safe_add(b, oldb);
      c = this.safe_add(c, oldc);
      d = this.safe_add(d, oldd);
    }
    return Array(a, b, c, d);
  },

 hex_hmac_md5:function(key, data){ return this.binl2hex(this.core_hmac_md5(key, data)); },

 hex_md5:function(s){return this.binl2hex(this.core_md5(this.str2binl(s), s.length * this.chrsz));},

 md5:function(s){return(this.hex_md5(s));},
 md5_cmn:function(q, a, b, x, s, t){return this.safe_add(this.bit_rol(this.safe_add(this.safe_add(a, q), this.safe_add(x, t)), s),b);},
 md5_ff:function(a, b, c, d, x, s, t){return this.md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);},
 md5_gg:function(a, b, c, d, x, s, t){return this.md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);},
 md5_hh:function(a, b, c, d, x, s, t){return this.md5_cmn(b ^ c ^ d, a, b, x, s, t);},
 md5_ii:function(a, b, c, d, x, s, t){return this.md5_cmn(c ^ (b | (~d)), a, b, x, s, t);},
 md5_vm_test:function(){return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";},

 safe_add:
  function(x, y){
    var lsw = (x & 0xFFFF) + (y & 0xFFFF);
    var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
    return (msw << 16) | (lsw & 0xFFFF);
  },

 str2binl:
  function(str){
    var bin = Array();
    var mask = (1 << this.chrsz) - 1;
    for(var i = 0; i < str.length * this.chrsz; i += this.chrsz)
      bin[i>>5] |= (str.charCodeAt(i / this.chrsz) & mask) << (i%32);
    return bin;
  },
 str_hmac_md5:function(key, data){ return binl2str(core_hmac_md5(key, data)); },
 str_md5:function(s){ return binl2str(core_md5(str2binl(s), s.length * this.chrsz));}
}
</script>
</head>
<body>
<b>Source:</b><br>
<textarea id=t1></textarea><br>
<b>Password:</b><input type=password value=default id=p1><input type=button onclick="webEncode();" value="Start Encode"><br>
<b>Encoded:</b><br>
<textarea id=t2></textarea><br>
<input type=button onclick="runCode();" value="Run Code">
</body>
</html>

Save the source code as an HTML file, double-click to see the effect


Related articles: