Escolar Documentos
Profissional Documentos
Cultura Documentos
MD5
MD5
a
b
c
d
= 1732584193;
= -271733879;
= -1732584194;
= 271733878;
var
var
var
var
olda
oldb
oldc
oldd
=
=
=
=
a;
b;
c;
d;
a
d
c
b
a
d
c
b
a
d
c
b
a
d
c
b
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
md5_ff(a,
md5_ff(d,
md5_ff(c,
md5_ff(b,
md5_ff(a,
md5_ff(d,
md5_ff(c,
md5_ff(b,
md5_ff(a,
md5_ff(d,
md5_ff(c,
md5_ff(b,
md5_ff(a,
md5_ff(d,
md5_ff(c,
md5_ff(b,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
x[i+ 0],
x[i+ 1],
x[i+ 2],
x[i+ 3],
x[i+ 4],
x[i+ 5],
x[i+ 6],
x[i+ 7],
x[i+ 8],
x[i+ 9],
x[i+10],
x[i+11],
x[i+12],
x[i+13],
x[i+14],
x[i+15],
7 ,
12,
17,
22,
7 ,
12,
17,
22,
7 ,
12,
17,
22,
7 ,
12,
17,
22,
-680876936);
-389564586);
606105819);
-1044525330);
-176418897);
1200080426);
-1473231341);
-45705983);
1770035416);
-1958414417);
-42063);
-1990404162);
1804603682);
-40341101);
-1502002290);
1236535329);
a
d
c
b
a
d
c
b
a
d
c
b
a
d
c
b
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
md5_gg(a,
md5_gg(d,
md5_gg(c,
md5_gg(b,
md5_gg(a,
md5_gg(d,
md5_gg(c,
md5_gg(b,
md5_gg(a,
md5_gg(d,
md5_gg(c,
md5_gg(b,
md5_gg(a,
md5_gg(d,
md5_gg(c,
md5_gg(b,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
x[i+ 1],
x[i+ 6],
x[i+11],
x[i+ 0],
x[i+ 5],
x[i+10],
x[i+15],
x[i+ 4],
x[i+ 9],
x[i+14],
x[i+ 3],
x[i+ 8],
x[i+13],
x[i+ 2],
x[i+ 7],
x[i+12],
5 ,
9 ,
14,
20,
5 ,
9 ,
14,
20,
5 ,
9 ,
14,
20,
5 ,
9 ,
14,
20,
-165796510);
-1069501632);
643717713);
-373897302);
-701558691);
38016083);
-660478335);
-405537848);
568446438);
-1019803690);
-187363961);
1163531501);
-1444681467);
-51403784);
1735328473);
-1926607734);
a
d
c
b
a
d
c
b
a
d
c
b
a
d
c
b
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
md5_hh(a,
md5_hh(d,
md5_hh(c,
md5_hh(b,
md5_hh(a,
md5_hh(d,
md5_hh(c,
md5_hh(b,
md5_hh(a,
md5_hh(d,
md5_hh(c,
md5_hh(b,
md5_hh(a,
md5_hh(d,
md5_hh(c,
md5_hh(b,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
x[i+ 5],
x[i+ 8],
x[i+11],
x[i+14],
x[i+ 1],
x[i+ 4],
x[i+ 7],
x[i+10],
x[i+13],
x[i+ 0],
x[i+ 3],
x[i+ 6],
x[i+ 9],
x[i+12],
x[i+15],
x[i+ 2],
4 ,
11,
16,
23,
4 ,
11,
16,
23,
4 ,
11,
16,
23,
4 ,
11,
16,
23,
-378558);
-2022574463);
1839030562);
-35309556);
-1530992060);
1272893353);
-155497632);
-1094730640);
681279174);
-358537222);
-722521979);
76029189);
-640364487);
-421815835);
530742520);
-995338651);
a
d
c
b
a
d
c
b
a
d
c
=
=
=
=
=
=
=
=
=
=
=
md5_ii(a,
md5_ii(d,
md5_ii(c,
md5_ii(b,
md5_ii(a,
md5_ii(d,
md5_ii(c,
md5_ii(b,
md5_ii(a,
md5_ii(d,
md5_ii(c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
a,
d,
c,
b,
x[i+ 0],
x[i+ 7],
x[i+14],
x[i+ 5],
x[i+12],
x[i+ 3],
x[i+10],
x[i+ 1],
x[i+ 8],
x[i+15],
x[i+ 6],
6 ,
10,
15,
21,
6 ,
10,
15,
21,
6 ,
10,
15,
-198630844);
1126891415);
-1416354905);
-57434055);
1700485571);
-1894986606);
-1051523);
-2054922799);
1873313359);
-30611744);
-1560198380);
b
a
d
c
b
=
=
=
=
=
md5_ii(b,
md5_ii(a,
md5_ii(d,
md5_ii(c,
md5_ii(b,
c,
b,
a,
d,
c,
a
b
c
d
=
=
=
=
safe_add(a,
safe_add(b,
safe_add(c,
safe_add(d,
d,
c,
b,
a,
d,
a,
d,
c,
b,
a,
x[i+13],
x[i+ 4],
x[i+11],
x[i+ 2],
x[i+ 9],
21, 1309151649);
6 , -145523070);
10, -1120210379);
15, 718787259);
21, -343485551);
olda);
oldb);
oldc);
oldd);
}
return Array(a, b, c, d);
}
/*
* Estas funes executam as quatro operaes bsicas que o algoritmo
usa.
*/
function md5_cmn(q, a, b, x, s, t)
{
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)),
s),b);
}
function md5_ff(a, b, c, d, x, s, t)
{
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t)
{
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t)
{
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t)
{
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}
/*
* Calcular o HMAC-MD5, de uma chave e de alguns dados
*/
function core_hmac_md5(key, data)
{
var bkey = str2binl(key);
if(bkey.length > 16) bkey = core_md5(bkey, key.length * 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 *
chrsz);
return core_md5(opad.concat(hash), 512 + 128);
}
/*
* Adicionar os inteiros, envolvendo em 2^32. Isto usa 16-bit
internamente
* para trabalhar em torno dos erros em intrpretes de algum JS.
*/
function safe_add(x, y)
{
/*
* Rodar um numero de 32-bit para esquerda.
*/
function bit_rol(num, cnt)
{
return (num << cnt) | (num >>> (32 - cnt));
}
/*
* Converter uma string de um array para uma palavra.
* Se o chrsz for ASCII, os carcteres (maior)>255 tm seu hi-byte
ignorado.
*/
function str2binl(str)
{
var bin = Array();
var mask = (1 << chrsz) - 1;
for(var i = 0; i < str.length * chrsz; i += chrsz)
bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
return bin;
}
/*
* Converte um array de palavras para uma string.
*/
function binl2str(bin)
{
var str = "";
var mask = (1 << chrsz) - 1;
for(var i = 0; i < bin.length * 32; i += chrsz)
str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
return str;
}
/*
* Converte um array de palavras para uma string em hex.
*/
function binl2hex(binarray)
{
var hex_tab = 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;
}
/*
* Converte um array de palavras para uma string em base-64.
*/
function binl2b64(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
)