1//DESå è§£å¯æ¹æ³ 2var UtiSecurity = { 3 //èªå®ç¾©éé° 4 key: 'YES123GO', 5 //å å¯ 6 DESencrypt: function (message) { 7 8 var ciphertext = this.stringToHex(this.des(message, 1, 0)); 9 return ciphertext; 10 11 }, 12 //è§£å¯ 13 DESdecrypt: function (message) { 14 if (message != null || message != '') { 15 var plaintext = this.des(this.HexTostring(message), 0, 0); 16 } else { var plaintext = '';} 17 return plaintext; 18 19 }, 20 des: function (message, encrypt, mode, iv) { 21 var spfunction1 = new Array(0x1010400, 0, 0x10000, 0x1010404, 0x1010004, 0x10404, 0x4, 0x10000, 0x400, 0x1010400, 0x1010404, 0x400, 0x1000404, 0x1010004, 0x1000000, 0x4, 0x404, 0x1000400, 0x1000400, 0x10400, 0x10400, 0x1010000, 0x1010000, 0x1000404, 0x10004, 0x1000004, 0x1000004, 0x10004, 0, 0x404, 0x10404, 0x1000000, 0x10000, 0x1010404, 0x4, 0x1010000, 0x1010400, 0x1000000, 0x1000000, 0x400, 0x1010004, 0x10000, 0x10400, 0x1000004, 0x400, 0x4, 0x1000404, 0x10404, 0x1010404, 0x10004, 0x1010000, 0x1000404, 0x1000004, 0x404, 0x10404, 0x1010400, 0x404, 0x1000400, 0x1000400, 0, 0x10004, 0x10400, 0, 0x1010004); 22 var spfunction2 = new Array(-0x7fef7fe0, -0x7fff8000, 0x8000, 0x108020, 0x100000, 0x20, -0x7fefffe0, -0x7fff7fe0, -0x7fffffe0, -0x7fef7fe0, -0x7fef8000, -0x8000000, -0x7fff8000, 0x100000, 0x20, -0x7fefffe0, 0x108000, 0x100020, -0x7fff7fe0, 0, -0x8000000, 0x8000, 0x108020, -0x7ff00000, 0x100020, -0x7fffffe0, 0, 0x108000, 0x8020, -0x7fef8000, -0x7ff00000, 0x8020, 0, 0x108020, -0x7fefffe0, 0x100000, -0x7fff7fe0, -0x7ff00000, -0x7fef8000, 0x8000, -0x7ff00000, -0x7fff8000, 0x20, -0x7fef7fe0, 0x108020, 0x20, 0x8000, -0x8000000, 0x8020, -0x7fef8000, 0x100000, -0x7fffffe0, 0x100020, -0x7fff7fe0, -0x7fffffe0, 0x100020, 0x108000, 0, -0x7fff8000, 0x8020, -0x8000000, -0x7fefffe0, -0x7fef7fe0, 0x108000); 23 var spfunction3 = new Array(0x208, 0x8020200, 0, 0x8020008, 0x8000200, 0, 0x20208, 0x8000200, 0x20008, 0x8000008, 0x8000008, 0x20000, 0x8020208, 0x20008, 0x8020000, 0x208, 0x8000000, 0x8, 0x8020200, 0x200, 0x20200, 0x8020000, 0x8020008, 0x20208, 0x8000208, 0x20200, 0x20000, 0x8000208, 0x8, 0x8020208, 0x200, 0x8000000, 0x8020200, 0x8000000, 0x20008, 0x208, 0x20000, 0x8020200, 0x8000200, 0, 0x200, 0x20008, 0x8020208, 0x8000200, 0x8000008, 0x200, 0, 0x8020008, 0x8000208, 0x20000, 0x8000000, 0x8020208, 0x8, 0x20208, 0x20200, 0x8000008, 0x8020000, 0x8000208, 0x208, 0x8020000, 0x20208, 0x8, 0x8020008, 0x20200); 24 var spfunction4 = new Array(0x802001, 0x2081, 0x2081, 0x80, 0x802080, 0x800081, 0x800001, 0x2001, 0, 0x802000, 0x802000, 0x802081, 0x81, 0, 0x800080, 0x800001, 0x1, 0x2000, 0x800000, 0x802001, 0x80, 0x800000, 0x2001, 0x2080, 0x800081, 0x1, 0x2080, 0x800080, 0x2000, 0x802080, 0x802081, 0x81, 0x800080, 0x800001, 0x802000, 0x802081, 0x81, 0, 0, 0x802000, 0x2080, 0x800080, 0x800081, 0x1, 0x802001, 0x2081, 0x2081, 0x80, 0x802081, 0x81, 0x1, 0x2000, 0x800001, 0x2001, 0x802080, 0x800081, 0x2001, 0x2080, 0x800000, 0x802001, 0x80, 0x800000, 0x2000, 0x802080); 25 var spfunction5 = new Array(0x100, 0x2080100, 0x2080000, 0x42000100, 0x80000, 0x100, 0x40000000, 0x2080000, 0x40080100, 0x80000, 0x2000100, 0x40080100, 0x42000100, 0x42080000, 0x80100, 0x40000000, 0x2000000, 0x40080000, 0x40080000, 0, 0x40000100, 0x42080100, 0x42080100, 0x2000100, 0x42080000, 0x40000100, 0, 0x42000000, 0x2080100, 0x2000000, 0x42000000, 0x80100, 0x80000, 0x42000100, 0x100, 0x2000000, 0x40000000, 0x2080000, 0x42000100, 0x40080100, 0x2000100, 0x40000000, 0x42080000, 0x2080100, 0x40080100, 0x100, 0x2000000, 0x42080000, 0x42080100, 0x80100, 0x42000000, 0x42080100, 0x2080000, 0, 0x40080000, 0x42000000, 0x80100, 0x2000100, 0x40000100, 0x80000, 0, 0x40080000, 0x2080100, 0x40000100); 26 var spfunction6 = new Array(0x20000010, 0x20400000, 0x4000, 0x20404010, 0x20400000, 0x10, 0x20404010, 0x400000, 0x20004000, 0x404010, 0x400000, 0x20000010, 0x400010, 0x20004000, 0x20000000, 0x4010, 0, 0x400010, 0x20004010, 0x4000, 0x404000, 0x20004010, 0x10, 0x20400010, 0x20400010, 0, 0x404010, 0x20404000, 0x4010, 0x404000, 0x20404000, 0x20000000, 0x20004000, 0x10, 0x20400010, 0x404000, 0x20404010, 0x400000, 0x4010, 0x20000010, 0x400000, 0x20004000, 0x20000000, 0x4010, 0x20000010, 0x20404010, 0x404000, 0x20400000, 0x404010, 0x20404000, 0, 0x20400010, 0x10, 0x4000, 0x20400000, 0x404010, 0x4000, 0x400010, 0x20004010, 0, 0x20404000, 0x20000000, 0x400010, 0x20004010); 27 var spfunction7 = new Array(0x200000, 0x4200002, 0x4000802, 0, 0x800, 0x4000802, 0x200802, 0x4200800, 0x4200802, 0x200000, 0, 0x4000002, 0x2, 0x4000000, 0x4200002, 0x802, 0x4000800, 0x200802, 0x200002, 0x4000800, 0x4000002, 0x4200000, 0x4200800, 0x200002, 0x4200000, 0x800, 0x802, 0x4200802, 0x200800, 0x2, 0x4000000, 0x200800, 0x4000000, 0x200800, 0x200000, 0x4000802, 0x4000802, 0x4200002, 0x4200002, 0x2, 0x200002, 0x4000000, 0x4000800, 0x200000, 0x4200800, 0x802, 0x200802, 0x4200800, 0x802, 0x4000002, 0x4200802, 0x4200000, 0x200800, 0, 0x2, 0x4200802, 0, 0x200802, 0x4200000, 0x800, 0x4000002, 0x4000800, 0x800, 0x200002); 28 var spfunction8 = new Array(0x10001040, 0x1000, 0x40000, 0x10041040, 0x10000000, 0x10001040, 0x40, 0x10000000, 0x40040, 0x10040000, 0x10041040, 0x41000, 0x10041000, 0x41040, 0x1000, 0x40, 0x10040000, 0x10000040, 0x10001000, 0x1040, 0x41000, 0x40040, 0x10040040, 0x10041000, 0x1040, 0, 0, 0x10040040, 0x10000040, 0x10001000, 0x41040, 0x40000, 0x41040, 0x40000, 0x10041000, 0x1000, 0x40, 0x10040040, 0x1000, 0x41040, 0x10001000, 0x40, 0x10000040, 0x10040000, 0x10040040, 0x10000000, 0x40000, 0x10001040, 0, 0x10041040, 0x40040, 0x10000040, 0x10040000, 0x10001000, 0x10001040, 0, 0x10041040, 0x41000, 0x41000, 0x1040, 0x1040, 0x40040, 0x10000000, 0x10041000); 29 var keys = this.des_createKeys(); 30 var m = 0, 31 i, j, temp, temp2, right1, right2, left, right, looping; 32 var cbcleft, cbcleft2, cbcright, cbcright2; 33 var endloop, loopinc; 34 var len = message.length; 35 var chunk = 0; 36 var iterations = keys.length == 32 ? 3 : 9; 37 if (iterations == 3) { 38 looping = encrypt ? new Array(0, 32, 2) : new Array(30, -2, -2); 39 } else { 40 looping = encrypt ? new Array(0, 32, 2, 62, 30, -2, 64, 96, 2) : new Array(94, 62, -2, 32, 64, 2, 30, -2, -2); 41 } 42 message += "\0\0\0\0\0\0\0\0"; 43 result = ""; 44 tempresult = ""; 45 if (mode == 1) { 46 cbcleft = (iv.charCodeAt(m++) << 24) | (iv.charCodeAt(m++) << 16) | (iv.charCodeAt(m++) << 8) | iv.charCodeAt(m++); 47 cbcright = (iv.charCodeAt(m++) << 24) | (iv.charCodeAt(m++) << 16) | (iv.charCodeAt(m++) << 8) | iv.charCodeAt(m++); 48 m = 0; 49 } 50 while (m < len) { 51 if (encrypt) { 52 left = (message.charCodeAt(m++) << 16) | message.charCodeAt(m++); 53 right = (message.charCodeAt(m++) << 16) | message.charCodeAt(m++); 54 } else { 55 left = (message.charCodeAt(m++) << 24) | (message.charCodeAt(m++) << 16) | (message.charCodeAt(m++) << 8) | message.charCodeAt(m++); 56 right = (message.charCodeAt(m++) << 24) | (message.charCodeAt(m++) << 16) | (message.charCodeAt(m++) << 8) | message.charCodeAt(m++); 57 } if (mode == 1) { 58 if (encrypt) { 59 left ^= cbcleft; 60 right ^= cbcright; 61 } else { 62 cbcleft2 = cbcleft;
63 cbcright2 = cbcright; 64 cbcleft = left; 65 cbcright = right; 66 } 67 } 68 temp = ((left >>> 4) ^ right) & 0x0f0f0f0f; 69 right ^= temp; 70 left ^= (temp << 4); 71 temp = ((left >>> 16) ^ right) & 0x0000ffff; 72 right ^= temp; 73 left ^= (temp << 16); 74 temp = ((right >>> 2) ^ left) & 0x33333333; 75 left ^= temp; 76 right ^= (temp << 2); 77 temp = ((right >>> 8) ^ left) & 0x00ff00ff; 78 left ^= temp; 79 right ^= (temp << 8); 80 temp = ((left >>> 1) ^ right) & 0x55555555; 81 right ^= temp; 82 left ^= (temp << 1); 83 left = ((left << 1) | (left >>> 31)); 84 right = ((right << 1) | (right >>> 31)); 85 for (j = 0; j < iterations; j += 3) { 86 endloop = looping[j + 1]; 87 loopinc = looping[j + 2]; 88 for (i = looping[j]; i != endloop; i += loopinc) { 89 right1 = right ^ keys[i]; 90 right2 = ((right >>> 4) | (right << 28)) ^ keys[i + 1]; 91 temp = left; 92 left = right; 93 right = temp ^ (spfunction2[(right1 >>> 24) & 0x3f] | spfunction4[(right1 >>> 16) & 0x3f] | spfunction6[(right1 >>> 8) & 0x3f] | spfunction8[right1 & 0x3f] | spfunction1[(right2 >>> 24) & 0x3f] | spfunction3[(right2 >>> 16) & 0x3f] | spfunction5[(right2 >>> 8) & 0x3f] | spfunction7[right2 & 0x3f]); 94 } 95 temp = left; 96 left = right; 97 right = temp; 98 } 99 left = ((left >>> 1) | (left << 31)); 100 right = ((right >>> 1) | (right << 31)); 101 temp = ((left >>> 1) ^ right) & 0x55555555; 102 right ^= temp; 103 left ^= (temp << 1); 104 temp = ((right >>> 8) ^ left) & 0x00ff00ff; 105 left ^= temp; 106 right ^= (temp << 8); 107 temp = ((right >>> 2) ^ left) & 0x33333333; 108 left ^= temp; 109 right ^= (temp << 2); 110 temp = ((left >>> 16) ^ right) & 0x0000ffff; 111 right ^= temp; 112 left ^= (temp << 16); 113 temp = ((left >>> 4) ^ right) & 0x0f0f0f0f; 114 right ^= temp; 115 left ^= (temp << 4); 116 if (mode == 1) { 117 if (encrypt) { 118 cbcleft = left; 119 cbcright = right; 120 } else { 121 left ^= cbcleft2; 122 right ^= cbcright2; 123 } 124 } 125 if (encrypt) { 126 tempresult += String.fromCharCode((left >>> 24), ((left >>> 16) & 0xff), ((left >>> 8) & 0xff), (left & 0xff), (right >>> 24), ((right >>> 16) & 0xff), ((right >>> 8) & 0xff), (right & 0xff)); 127 } else { 128 tempresult += String.fromCharCode(((left >>> 16) & 0xffff), (left & 0xffff), ((right >>> 16) & 0xffff), (right & 0xffff)); 129 } 130 encrypt ? chunk += 16 : chunk += 8; 131 if (chunk == 512) { 132 result += tempresult; 133 tempresult = ""; 134 chunk = 0; 135 } 136 } 137 return result + tempresult; 138 }, 139 des_createKeys: function () { 140 pc2bytes0 = new Array(0, 0x4, 0x20000000, 0x20000004, 0x10000, 0x10004, 0x20010000, 0x20010004, 0x200, 0x204, 0x20000200, 0x20000204, 0x10200, 0x10204, 0x20010200, 0x20010204); 141 pc2bytes1 = new Array(0, 0x1, 0x100000, 0x100001, 0x4000000, 0x4000001, 0x4100000, 0x4100001, 0x100, 0x101, 0x100100, 0x100101, 0x4000100, 0x4000101, 0x4100100, 0x4100101); 142 pc2bytes2 = new Array(0, 0x8, 0x800, 0x808, 0x1000000, 0x1000008, 0x1000800, 0x1000808, 0, 0x8, 0x800, 0x808, 0x1000000, 0x1000008, 0x1000800, 0x1000808); 143 pc2bytes3 = new Array(0, 0x200000, 0x8000000, 0x8200000, 0x2000, 0x202000, 0x8002000, 0x8202000, 0x20000, 0x220000, 0x8020000, 0x8220000, 0x22000, 0x222000, 0x8022000, 0x8222000); 144 pc2bytes4 = new Array(0, 0x40000, 0x10, 0x40010, 0, 0x40000, 0x10, 0x40010, 0x1000, 0x41000, 0x1010, 0x41010, 0x1000, 0x41000, 0x1010, 0x41010); 145 pc2bytes5 = new Array(0, 0x400, 0x20, 0x420, 0, 0x400, 0x20, 0x420, 0x2000000, 0x2000400, 0x2000020, 0x2000420, 0x2000000, 0x2000400, 0x2000020, 0x2000420); 146 pc2bytes6 = new Array(0, 0x10000000, 0x80000, 0x10080000, 0x2, 0x10000002, 0x80002, 0x10080002, 0, 0x10000000, 0x80000, 0x10080000, 0x2, 0x10000002, 0x80002, 0x10080002); 147 pc2bytes7 = new Array(0, 0x10000, 0x800, 0x10800, 0x20000000, 0x20010000, 0x20000800, 0x20010800, 0x20000, 0x30000, 0x20800, 0x30800, 0x20020000, 0x20030000, 0x20020800, 0x20030800); 148 pc2bytes8 = new Array(0, 0x40000, 0, 0x40000, 0x2, 0x40002, 0x2, 0x40002, 0x2000000, 0x2040000, 0x2000000, 0x2040000, 0x2000002, 0x2040002, 0x2000002, 0x2040002); 149 pc2bytes9 = new Array(0, 0x10000000, 0x8, 0x10000008, 0, 0x10000000, 0x8, 0x10000008, 0x400, 0x10000400, 0x408, 0x10000408, 0x400, 0x10000400, 0x408, 0x10000408); 150 pc2bytes10 = new Array(0, 0x20, 0, 0x20, 0x100000, 0x100020, 0x100000, 0x100020, 0x2000, 0x2020, 0x2000, 0x2020, 0x102000, 0x102020, 0x102000, 0x102020); 151 pc2bytes11 = new Array(0, 0x1000000, 0x200, 0x1000200, 0x200000, 0x1200000, 0x200200, 0x1200200, 0x4000000, 0x5000000, 0x4000200, 0x5000200, 0x4200000, 0x5200000, 0x4200200, 0x5200200); 152 pc2bytes12 = new Array(0, 0x1000, 0x8000000, 0x8001000, 0x80000, 0x81000, 0x8080000, 0x8081000, 0x10, 0x1010, 0x8000010, 0x8001010, 0x80010, 0x81010, 0x8080010, 0x8081010); 153 pc2bytes13 = new Array(0, 0x4, 0x100, 0x104, 0, 0x4, 0x100, 0x104, 0x1, 0x5, 0x101, 0x105, 0x1, 0x5, 0x101, 0x105); 154 var iterations = this.key.length >= 24 ? 3 : 1; 155 var keys = new Array(32 * iterations); 156 var shifts = new Array(0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0); 157 var lefttemp, righttemp, m = 0, 158 n = 0, 159 temp; 160 for (var j = 0; j < iterations; j++) {
161 left = (this.key.charCodeAt(m++) << 24) | (this.key.charCodeAt(m++) << 16) | (this.key.charCodeAt(m++) << 8) | this.key.charCodeAt(m++); 162 right = (this.key.charCodeAt(m++) << 24) | (this.key.charCodeAt(m++) << 16) | (this.key.charCodeAt(m++) << 8) | this.key.charCodeAt(m++); 163 temp = ((left >>> 4) ^ right) & 0x0f0f0f0f; 164 right ^= temp; 165 left ^= (temp << 4); 166 temp = ((right >>> -16) ^ left) & 0x0000ffff; 167 left ^= temp; 168 right ^= (temp << -16); 169 temp = ((left >>> 2) ^ right) & 0x33333333; 170 right ^= temp; 171 left ^= (temp << 2); 172 temp = ((right >>> -16) ^ left) & 0x0000ffff; 173 left ^= temp; 174 right ^= (temp << -16); 175 temp = ((left >>> 1) ^ right) & 0x55555555; 176 right ^= temp; 177 left ^= (temp << 1); 178 temp = ((right >>> 8) ^ left) & 0x00ff00ff; 179 left ^= temp; 180 right ^= (temp << 8); 181 temp = ((left >>> 1) ^ right) & 0x55555555; 182 right ^= temp; 183 left ^= (temp << 1); 184 temp = (left << 8) | ((right >>> 20) & 0x000000f0); 185 left = (right << 24) | ((right << 8) & 0xff0000) | ((right >>> 8) & 0xff00) | ((right >>> 24) & 0xf0); 186 right = temp; 187 for (i = 0; i < shifts.length; i++) { 188 if (shifts[i]) { 189 left = (left << 2) | (left >>> 26); 190 right = (right << 2) | (right >>> 26); 191 } else { 192 left = (left << 1) | (left >>> 27); 193 right = (right << 1) | (right >>> 27); 194 } 195 left &= -0xf; 196 right &= -0xf; 197 lefttemp = pc2bytes0[left >>> 28] | pc2bytes1[(left >>> 24) & 0xf] | pc2bytes2[(left >>> 20) & 0xf] | pc2bytes3[(left >>> 16) & 0xf] | pc2bytes4[(left >>> 12) & 0xf] | pc2bytes5[(left >>> 8) & 0xf] | pc2bytes6[(left >>> 4) & 0xf]; 198 righttemp = pc2bytes7[right >>> 28] | pc2bytes8[(right >>> 24) & 0xf] | pc2bytes9[(right >>> 20) & 0xf] | pc2bytes10[(right >>> 16) & 0xf] | pc2bytes11[(right >>> 12) & 0xf] | pc2bytes12[(right >>> 8) & 0xf] | pc2bytes13[(right >>> 4) & 0xf]; 199 temp = ((righttemp >>> 16) ^ lefttemp) & 0x0000ffff; 200 keys[n++] = lefttemp ^ temp; 201 keys[n++] = righttemp ^ (temp << 16); 202 } 203 } 204 return keys; 205 206 }, 207 stringToHex: function (s) { 208 var r = ""; 209 var hexes = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"); 210 for (var i = 0; i < (s.length) ; i++) { 211 r += hexes[s.charCodeAt(i) >> 4] + hexes[s.charCodeAt(i) & 0xf]; 212 } 213 return r; 214 }, 215 HexTostring: function (s) { 216 var r = ""; 217 for (var i = 0; i < s.length; i += 2) { 218 var sxx = parseInt(s.substring(i, i + 2), 16); 219 r += String.fromCharCode(sxx); 220 } 221 return r; 222 223 } 224 225 226 227}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.