You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
6.6 KiB
182 lines
6.6 KiB
function hex_md5(a) { |
|
return binl2hex(core_md5(str2binl(a), a.length * 8)) |
|
} |
|
|
|
function core_md5(p, k) { |
|
p[k >> 5] |= 128 << ((k) % 32); |
|
p[(((k + 64) >>> 9) << 4) + 14] = k; |
|
var o = 1732584193; |
|
var n = -271733879; |
|
var m = -1732584194; |
|
var l = 271733878; |
|
for (var g = 0; g < p.length; g += 16) { |
|
var j = o; |
|
var h = n; |
|
var f = m; |
|
var e = l; |
|
o = md5_ff(o, n, m, l, p[g + 0], 7, -680876936); |
|
l = md5_ff(l, o, n, m, p[g + 1], 12, -389564586); |
|
m = md5_ff(m, l, o, n, p[g + 2], 17, 606105819); |
|
n = md5_ff(n, m, l, o, p[g + 3], 22, -1044525330); |
|
o = md5_ff(o, n, m, l, p[g + 4], 7, -176418897); |
|
l = md5_ff(l, o, n, m, p[g + 5], 12, 1200080426); |
|
m = md5_ff(m, l, o, n, p[g + 6], 17, -1473231341); |
|
n = md5_ff(n, m, l, o, p[g + 7], 22, -45705983); |
|
o = md5_ff(o, n, m, l, p[g + 8], 7, 1770035416); |
|
l = md5_ff(l, o, n, m, p[g + 9], 12, -1958414417); |
|
m = md5_ff(m, l, o, n, p[g + 10], 17, -42063); |
|
n = md5_ff(n, m, l, o, p[g + 11], 22, -1990404162); |
|
o = md5_ff(o, n, m, l, p[g + 12], 7, 1804603682); |
|
l = md5_ff(l, o, n, m, p[g + 13], 12, -40341101); |
|
m = md5_ff(m, l, o, n, p[g + 14], 17, -1502002290); |
|
n = md5_ff(n, m, l, o, p[g + 15], 22, 1236535329); |
|
o = md5_gg(o, n, m, l, p[g + 1], 5, -165796510); |
|
l = md5_gg(l, o, n, m, p[g + 6], 9, -1069501632); |
|
m = md5_gg(m, l, o, n, p[g + 11], 14, 643717713); |
|
n = md5_gg(n, m, l, o, p[g + 0], 20, -373897302); |
|
o = md5_gg(o, n, m, l, p[g + 5], 5, -701558691); |
|
l = md5_gg(l, o, n, m, p[g + 10], 9, 38016083); |
|
m = md5_gg(m, l, o, n, p[g + 15], 14, -660478335); |
|
n = md5_gg(n, m, l, o, p[g + 4], 20, -405537848); |
|
o = md5_gg(o, n, m, l, p[g + 9], 5, 568446438); |
|
l = md5_gg(l, o, n, m, p[g + 14], 9, -1019803690); |
|
m = md5_gg(m, l, o, n, p[g + 3], 14, -187363961); |
|
n = md5_gg(n, m, l, o, p[g + 8], 20, 1163531501); |
|
o = md5_gg(o, n, m, l, p[g + 13], 5, -1444681467); |
|
l = md5_gg(l, o, n, m, p[g + 2], 9, -51403784); |
|
m = md5_gg(m, l, o, n, p[g + 7], 14, 1735328473); |
|
n = md5_gg(n, m, l, o, p[g + 12], 20, -1926607734); |
|
o = md5_hh(o, n, m, l, p[g + 5], 4, -378558); |
|
l = md5_hh(l, o, n, m, p[g + 8], 11, -2022574463); |
|
m = md5_hh(m, l, o, n, p[g + 11], 16, 1839030562); |
|
n = md5_hh(n, m, l, o, p[g + 14], 23, -35309556); |
|
o = md5_hh(o, n, m, l, p[g + 1], 4, -1530992060); |
|
l = md5_hh(l, o, n, m, p[g + 4], 11, 1272893353); |
|
m = md5_hh(m, l, o, n, p[g + 7], 16, -155497632); |
|
n = md5_hh(n, m, l, o, p[g + 10], 23, -1094730640); |
|
o = md5_hh(o, n, m, l, p[g + 13], 4, 681279174); |
|
l = md5_hh(l, o, n, m, p[g + 0], 11, -358537222); |
|
m = md5_hh(m, l, o, n, p[g + 3], 16, -722521979); |
|
n = md5_hh(n, m, l, o, p[g + 6], 23, 76029189); |
|
o = md5_hh(o, n, m, l, p[g + 9], 4, -640364487); |
|
l = md5_hh(l, o, n, m, p[g + 12], 11, -421815835); |
|
m = md5_hh(m, l, o, n, p[g + 15], 16, 530742520); |
|
n = md5_hh(n, m, l, o, p[g + 2], 23, -995338651); |
|
o = md5_ii(o, n, m, l, p[g + 0], 6, -198630844); |
|
l = md5_ii(l, o, n, m, p[g + 7], 10, 1126891415); |
|
m = md5_ii(m, l, o, n, p[g + 14], 15, -1416354905); |
|
n = md5_ii(n, m, l, o, p[g + 5], 21, -57434055); |
|
o = md5_ii(o, n, m, l, p[g + 12], 6, 1700485571); |
|
l = md5_ii(l, o, n, m, p[g + 3], 10, -1894986606); |
|
m = md5_ii(m, l, o, n, p[g + 10], 15, -1051523); |
|
n = md5_ii(n, m, l, o, p[g + 1], 21, -2054922799); |
|
o = md5_ii(o, n, m, l, p[g + 8], 6, 1873313359); |
|
l = md5_ii(l, o, n, m, p[g + 15], 10, -30611744); |
|
m = md5_ii(m, l, o, n, p[g + 6], 15, -1560198380); |
|
n = md5_ii(n, m, l, o, p[g + 13], 21, 1309151649); |
|
o = md5_ii(o, n, m, l, p[g + 4], 6, -145523070); |
|
l = md5_ii(l, o, n, m, p[g + 11], 10, -1120210379); |
|
m = md5_ii(m, l, o, n, p[g + 2], 15, 718787259); |
|
n = md5_ii(n, m, l, o, p[g + 9], 21, -343485551); |
|
o = safe_add(o, j); |
|
n = safe_add(n, h); |
|
m = safe_add(m, f); |
|
l = safe_add(l, e) |
|
} |
|
return Array(o, n, m, l) |
|
} |
|
|
|
function md5_cmn(h, e, d, c, g, f) { |
|
console.log(c, safe_add(bit_rol(safe_add(safe_add(e, h), safe_add(c, f)), g), d)) |
|
return safe_add(bit_rol(safe_add(safe_add(e, h), safe_add(c, f)), g), d) |
|
} |
|
|
|
function md5_ff(g, f, k, j, e, i, h) { |
|
return md5_cmn((f & k) | ((~f) & j), g, f, e, i, h) |
|
} |
|
|
|
function md5_gg(g, f, k, j, e, i, h) { |
|
return md5_cmn((f & j) | (k & (~j)), g, f, e, i, h) |
|
} |
|
|
|
function md5_hh(g, f, k, j, e, i, h) { |
|
return md5_cmn(f ^ k ^ j, g, f, e, i, h) |
|
} |
|
|
|
function md5_ii(g, f, k, j, e, i, h) { |
|
return md5_cmn(k ^ (f | (~j)), g, f, e, i, h) |
|
} |
|
|
|
function safe_add(a, d) { |
|
var c = (a & 65535) + (d & 65535); |
|
var b = (a >> 16) + (d >> 16) + (c >> 16); |
|
return (b << 16) | (c & 65535) |
|
} |
|
|
|
function bit_rol(a, b) { |
|
return (a << b) | (a >>> (32 - b)) |
|
} |
|
|
|
function str2binl(d) { |
|
var c = Array(); |
|
var a = (1 << 8) - 1; |
|
for (var b = 0; b < d.length * 8; b += 8) { |
|
c[b >> 5] |= (d.charCodeAt(b / 8) & a) << (b % 32) |
|
} |
|
return c |
|
} |
|
|
|
function binl2hex(c) { |
|
var b = "0123456789abcdef"; |
|
var d = ""; |
|
for (var a = 0; a < c.length * 4; a++) { |
|
d += b.charAt((c[a >> 2] >> ((a % 4) * 8 + 4)) & 15) + b.charAt((c[a >> 2] >> ((a % 4) * 8)) & 15) |
|
} |
|
return d |
|
} |
|
|
|
function Base64Encoding(d) { |
|
var b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; |
|
var a = ""; |
|
var l, j, g, k, h, f, e; |
|
var c = 0; |
|
while (c < d.length) { |
|
l = d.charCodeAt(c++); |
|
j = d.charCodeAt(c++); |
|
g = d.charCodeAt(c++); |
|
k = l >> 2; |
|
h = ((l & 3) << 4) | (j >> 4); |
|
f = ((j & 15) << 2) | (g >> 6); |
|
e = g & 63; |
|
if (isNaN(j)) { |
|
f = e = 64 |
|
} else { |
|
if (isNaN(g)) { |
|
e = 64 |
|
} |
|
} |
|
a = a + b.charAt(k) + b.charAt(h) + b.charAt(f) + b.charAt(e) |
|
} |
|
return a |
|
} |
|
|
|
function utf8_encode(b) { |
|
b = b.replace(/\r\n/g, "\n"); |
|
var a = ""; |
|
for (var e = 0; e < b.length; e++) { |
|
var d = b.charCodeAt(e); |
|
if (d < 128) { |
|
a += String.fromCharCode(d) |
|
} else { |
|
if ((d > 127) && (d < 2048)) { |
|
a += String.fromCharCode((d >> 6) | 192); |
|
a += String.fromCharCode((d & 63) | 128) |
|
} else { |
|
a += String.fromCharCode((d >> 12) | 224); |
|
a += String.fromCharCode(((d >> 6) & 63) | 128); |
|
a += String.fromCharCode((d & 63) | 128) |
|
} |
|
} |
|
} |
|
return a |
|
}; |