﻿var qpgameReg = { jiami: function(passwd, key) { this.key = key; return this.h(this.en(passwd)); }, f: function(s, x, y, z) { switch (s) { case 0: return (x & y) ^ (~x & z); case 1: return x ^ y ^ z; case 2: return (x & y) ^ (x & z) ^ (y & z); case 3: return x ^ y ^ z; } }, rotl: function(x, n) { return (x << n) | (x >>> (32 - n)); }, tohs: function(str) { var s = '', v; for (var i = 7; i >= 0; i--) { v = (str >>> (i * 4)) & 0xf; s += v.toString(16); } return s; }, h: function(msg) { var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; msg += String.fromCharCode(0x80); var l = msg.length / 4 + 2; var N = Math.ceil(l / 16); var M = new Array(N); for (var i = 0; i < N; i++) { M[i] = new Array(16); for (var j = 0; j < 16; j++) { M[i][j] = (msg.charCodeAt(i * 64 + j * 4) << 24) | (msg.charCodeAt(i * 64 + j * 4 + 1) << 16) | (msg.charCodeAt(i * 64 + j * 4 + 2) << 8) | (msg.charCodeAt(i * 64 + j * 4 + 3)); } } M[N - 1][14] = ((msg.length - 1) * 8) / Math.pow(2, 32); M[N - 1][14] = Math.floor(M[N - 1][14]); M[N - 1][15] = ((msg.length - 1) * 8) & 0xffffffff; var H0 = 0x67452301; var H1 = 0xefcdab89; var H2 = 0x98badcfe; var H3 = 0x10325476; var H4 = 0xc3d2e1f0; var W = new Array(80); var a, b, c, d, e; for (var i2 = 0; i2 < N; i2++) { for (var t = 0; t < 16; t++) { W[t] = M[i2][t]; } for (var t2 = 16; t2 < 80; t2++) { W[t2] = this.rotl(W[t2 - 3] ^ W[t2 - 8] ^ W[t2 - 14] ^ W[t2 - 16], 1); } a = H0; b = H1; c = H2; d = H3; e = H4; for (var t3 = 0; t3 < 80; t3++) { var s = Math.floor(t3 / 20); var T = (this.rotl(a, 5) + this.f(s, b, c, d) + e + K[s] + W[t3]) & 0xffffffff; e = d; d = c; c = this.rotl(b, 30); b = a; a = T; } H0 = (H0 + a) & 0xffffffff; H1 = (H1 + b) & 0xffffffff; H2 = (H2 + c) & 0xffffffff; H3 = (H3 + d) & 0xffffffff; H4 = (H4 + e) & 0xffffffff; } return this.tohs(H0) + this.tohs(H1) + this.tohs(H2) + this.tohs(H3) + this.tohs(H4); }, bh: function(ar) { var charHex = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']; var str = ''; var len = ar.length; for (var i = 0, tmp = len << 2; i < tmp; i++) { str += charHex[((ar[i >> 2] >> (((i & 3) << 3) + 4)) & 0xF)] + charHex[((ar[i >> 2] >> ((i & 3) << 3)) & 0xF)]; } return str; }, sl: function(s, w) { var len = s.length; var v = []; for (var i = 0; i < len; i += 4) { v[i >> 2] = s.charCodeAt(i) | s.charCodeAt(i + 1) << 8 | s.charCodeAt(i + 2) << 16 | s.charCodeAt(i + 3) << 24; } if (w) { v[v.length] = len; } return v; }, en: function(p1) { if (p1 == '') { return ''; } var v = this.sl(p1, true); var k = this.sl(this.key, false); if (k.length < 4) { k.length = 4; } var n = v.length - 1; var z = v[n], y = v[0], de = 2654435769; var mx, e, p, q = Math.floor(6 + 52 / (n + 1)), sum = 0; while (0 < q--) { sum = sum + de & 0xffffffff; e = sum >>> 2 & 3; for (p = 0; p < n; p++) { y = v[p + 1]; mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z); z = v[p] = v[p] + mx & 0xffffffff; } y = v[0]; mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z); z = v[n] = v[n] + mx & 0xffffffff; } return this.bh(v); } };
