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