├── README.md └── utils.js /README.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /utils.js: -------------------------------------------------------------------------------- 1 | /* 2 | * 感谢yml大佬js封装库 当前版本V0.0.5 3 | * 22/11/21 随机生成GUID 4 | * 22/11/23 随机生成MAC网络地址 5 | * 22/11/28 随机一言 自建和其他 gitee版和github版 优先gitee 速度快 6 | */ 7 | let utilsVersion = "0.0.5" 8 | module.exports = { 9 | version: version,//版本 10 | txt_api: txt_api,//获取随机文案 一言api // "a"动画, "b"漫画, "c"游戏, "d"文学, "e"原创, "f"来自网络, "g"其他, "h"影视, "i"诗词, "j"网易云, "k"哲学 ,"l"抖机灵 11 | txt_api_self_gitee: txt_api_self_gitee,//获取随机文案 gitee版本 自建 // 古诗, 动画, 心情 ······ 12 | txt_api_self_github: txt_api_self_github,//获取随机文案 github版本 自建 // 古诗, 动画, 心情 ······ 13 | randomMac: randomMac,//随机MAC网络地址 14 | guid: guid,//根据时间戳生成GUID 8-4-4-4-12 15 | phone_num: phone_num,//手机号中间遮挡 16 | randomszdx: randomszdx,//随机 数字 + 大写字母 生成 17 | randomszxx: randomszxx,//随机 数字 + 小写字母 生成 18 | randomInt: randomInt,//随机整数生成 19 | ts13: ts13,//时间戳 13位 20 | ts10: ts10,//时间戳 10位 21 | tmtoDate: tmtoDate,//时间戳 转 日期 22 | local_hours: local_hours,//获取当前小时数 23 | local_minutes: local_minutes,//获取当前分钟数 24 | local_year: local_year,//获取当前年份 2022 25 | local_month: local_month,//获取当前月份(数字) 5月 26 | local_month_two: local_month_two,//获取当前月份(数字) 05月 补零 27 | local_day: local_day,//获取当前天数(数字) 5日 28 | local_day_two: local_day_two,//获取当前天数 05日 补零 29 | RSA_Encrypt: RSA_Encrypt,//RSA公钥加密 传参(数据,key) , 返回 base64格式 30 | base64_encode: base64_encode,//base64 编码 31 | base64_decode: base64_decode,//base64 解码 32 | SHA1_Encrypt: SHA1_Encrypt,//SHA1加密 33 | SHA256_Encrypt: SHA256_Encrypt,//SHA256加密 34 | MD5_Encrypt: MD5_Encrypt,//md5 加密 35 | }; 36 | 37 | /** 38 | * 版本号 39 | */ 40 | function version() { 41 | return utilsVersion; 42 | } 43 | 44 | /** 45 | * 获取随机文案 一言api 46 | */ 47 | function txt_api(i) { 48 | return new Promise((resolve) => { 49 | try { 50 | var request = require('request'); 51 | let options = { 52 | method: 'GET', 53 | url: 'https://v1.hitokoto.cn/', 54 | qs: { c: i }, 55 | }; 56 | request(options, function (error, response, body) { 57 | if (error) throw new Error(error); 58 | //console.log(body); 59 | let result = JSON.parse(body); 60 | let txt = result.hitokoto 61 | //console.log(result.id); 62 | resolve(txt) 63 | return txt 64 | }); 65 | } catch (error) { 66 | console.log(error); 67 | } 68 | }) 69 | } 70 | 71 | /** 72 | * 获取随机文案 自建 gitee仓库 73 | */ 74 | function txt_api_self_gitee(type) { 75 | return new Promise((resolve) => { 76 | try { 77 | var request = require('request'); 78 | let options = { 79 | method: 'GET', 80 | url: 'https://gitee.com/smallfawn/api/raw/master/txt.txt', 81 | }; 82 | request(options, function (error, response, body) { 83 | if (error) throw new Error(error); 84 | let txtbody = body 85 | //console.log(body); 86 | let txtv = txtbody.match(type) 87 | //console.log(txtv.input.slice(3, 14)); 88 | let lineArr = txtv.input.slice(3, 14)//截取行段文本 89 | let lineStar = lineArr.slice(1, 5)//首行 90 | let lineEnd = lineArr.slice(6, 10)//尾行 91 | let randomline = randomInt(Number(lineStar) - 1, Number(lineEnd) - 1)//随机行 因为JS的索引号是0,和行号不一致所以就-1 检测行数比实际行数大1 92 | let txt = txtbody.split("\n")[randomline] 93 | //console.log(lineArr); 94 | //console.log(lineStar, lineEnd); 95 | //console.log(Number(lineStar) -1, Number(lineEnd) -1); 96 | //console.log(randomline); 97 | //console.log(txt); 98 | resolve(txt) 99 | return txt 100 | }); 101 | } catch (error) { 102 | console.log(error); 103 | } 104 | }) 105 | } 106 | 107 | /** 108 | * 获取随机文案 自建 github仓库 109 | */ 110 | function txt_api_self_github(type) { 111 | return new Promise((resolve) => { 112 | function txtline(type) { 113 | switch (type) { 114 | case "古诗": //古诗 115 | return [2, 5] 116 | case "动画": //动画 117 | return [3, 8] 118 | case "心情": //心情 119 | return [3, 8] 120 | } 121 | } 122 | try { 123 | var request = require('request'); 124 | let options = { 125 | method: 'GET', 126 | url: 'https://ghproxy.com/https://raw.githubusercontent.com/smallfawn/api/main/txt.txt',//https://ghproxy.com/https://raw.githubusercontent.com/smallfawn/api/main/txt.txt 127 | }; 128 | request(options, function (error, response, body) { 129 | if (error) throw new Error(error); 130 | let txtbody = body 131 | //console.log(body); 132 | let line = txtline(type) 133 | let randomline = randomInt(line[0] - 1, line[1] - 1)//随机行 因为JS的索引号是0,和行号不一致所以就-1 检测行数比实际行数大1 134 | //console.log(txt.split("\n")[randomline]) 135 | let txt = txtbody.split("\n")[randomline] 136 | //console.log(txt); 137 | resolve(txt) 138 | return txt 139 | }); 140 | } catch (error) { 141 | console.log(error); 142 | } 143 | }) 144 | } 145 | 146 | /** 147 | * 随机MAC网络地址 148 | */ 149 | function randomMac() { 150 | return "XX:XX:XX:XX:XX:XX".replace(/X/g, function () { 151 | return "0123456789ABCDEF".charAt(Math.floor(Math.random() * 16)) 152 | }); 153 | } 154 | 155 | /** 156 | * 随机UUID(由时间戳生成) 8-4-4-4-12 157 | */ 158 | function guid() { 159 | function S4() { 160 | return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); 161 | } 162 | return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4()); 163 | } 164 | 165 | /** 166 | * 手机号中间遮挡 167 | */ 168 | function phone_num(phone_num) { 169 | if (phone_num.length == 11) { 170 | let data = phone_num.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2"); 171 | return data; 172 | } else { 173 | return phone_num; 174 | } 175 | } 176 | 177 | /** 178 | * 随机 数字 + 大写字母 生成 179 | */ 180 | function randomszdx(e) { 181 | e = e || 32; 182 | var t = "QWERTYUIOPASDFGHJKLZXCVBNM1234567890", 183 | a = t.length, 184 | n = ""; 185 | 186 | for (i = 0; i < e; i++) n += t.charAt(Math.floor(Math.random() * a)); 187 | return n; 188 | } 189 | 190 | /** 191 | * 随机 数字 + 小写字母 生成 192 | */ 193 | function randomszxx(e) { 194 | e = e || 32; 195 | var t = "qwertyuioplkjhgfdsazxcvbnm1234567890", 196 | a = t.length, 197 | n = ""; 198 | 199 | for (i = 0; i < e; i++) n += t.charAt(Math.floor(Math.random() * a)); 200 | return n; 201 | } 202 | 203 | /** 204 | * 随机整数生成 205 | */ 206 | function randomInt(min, max) { 207 | return Math.round(Math.random() * (max - min) + min); 208 | } 209 | 210 | /** 211 | * 时间戳 13位 212 | */ 213 | function ts13() { 214 | return Math.round(new Date().getTime()).toString(); 215 | } 216 | 217 | /** 218 | * 时间戳 10位 219 | */ 220 | function ts10() { 221 | return Math.round(new Date().getTime() / 1000).toString(); 222 | } 223 | 224 | /** 225 | * 时间戳 转 日期 226 | */ 227 | function tmtoDate(time = +new Date()) { 228 | if (time.toString().length == 13) { 229 | var date = new Date(time + 8 * 3600 * 1000); 230 | return date.toJSON().substr(0, 19).replace("T", " "); 231 | } else if (time.toString().length == 10) { 232 | time = time * 1000; 233 | var date = new Date(time + 8 * 3600 * 1000); 234 | return date.toJSON().substr(0, 19).replace("T", " "); 235 | } 236 | } 237 | 238 | /** 239 | * 获取当前小时数 240 | */ 241 | function local_hours() { 242 | let myDate = new Date(); 243 | let h = myDate.getHours(); 244 | return h; 245 | } 246 | 247 | /** 248 | * 获取当前分钟数 249 | */ 250 | function local_minutes() { 251 | let myDate = new Date(); 252 | let m = myDate.getMinutes(); 253 | return m; 254 | } 255 | 256 | /** 257 | * 获取当前年份 2022 258 | */ 259 | function local_year() { 260 | let myDate = new Date(); 261 | y = myDate.getFullYear(); 262 | return y; 263 | } 264 | 265 | /** 266 | * 获取当前月份(数字) 5月 267 | */ 268 | function local_month() { 269 | let myDate = new Date(); 270 | let m = myDate.getMonth(); 271 | return m; 272 | } 273 | 274 | /** 275 | * 获取当前月份(数字) 05月 补零 276 | */ 277 | function local_month_two() { 278 | let myDate = new Date(); 279 | let m = myDate.getMonth(); 280 | if (m.toString().length == 1) { 281 | m = `0${m}`; 282 | } 283 | return m; 284 | } 285 | 286 | /** 287 | * 获取当前天数(数字) 5日 288 | */ 289 | function local_day() { 290 | let myDate = new Date(); 291 | let d = myDate.getDate(); 292 | return d; 293 | } 294 | 295 | /** 296 | * 获取当前天数 05日 补零 297 | */ 298 | function local_day_two() { 299 | let myDate = new Date(); 300 | let d = myDate.getDate(); 301 | if (d.toString().length == 1) { 302 | d = `0${d}`; 303 | } 304 | return d; 305 | } 306 | 307 | /** 308 | * RSA公钥加密 传参(数据,key) , 返回 base64格式 309 | */ 310 | function RSA_Encrypt(msg, key) { 311 | global.navigator = { appName: 'nodejs' }; // fake the navigator object 312 | global.window = {}; // fake the window object 313 | const JSEncrypt = require('jsencrypt') 314 | let enc = new JSEncrypt(); 315 | enc.setPublicKey(key) 316 | return enc.encrypt(msg).toString(); 317 | } 318 | 319 | /** 320 | * base64 编码 321 | */ 322 | function base64_encode(data) { 323 | let a = Buffer.from(data, 'utf-8').toString('base64') 324 | return a 325 | } 326 | 327 | /** 328 | * base64 解码 329 | */ 330 | function base64_decode(data) { 331 | let a = Buffer.from(data, 'base64').toString('utf8') 332 | return a 333 | } 334 | 335 | /** 336 | * SHA1 加密 337 | */ 338 | function SHA1_Encrypt(s) { 339 | var data = new Uint8Array(encodeUTF8(s)) 340 | var i, j, t; 341 | var l = ((data.length + 8) >>> 6 << 4) + 16, s = new Uint8Array(l << 2); 342 | s.set(new Uint8Array(data.buffer)), s = new Uint32Array(s.buffer); 343 | for (t = new DataView(s.buffer), i = 0; i < l; i++)s[i] = t.getUint32(i << 2); 344 | s[data.length >> 2] |= 0x80 << (24 - (data.length & 3) * 8); 345 | s[l - 1] = data.length << 3; 346 | var w = [], f = [ 347 | function () { return m[1] & m[2] | ~m[1] & m[3]; }, 348 | function () { return m[1] ^ m[2] ^ m[3]; }, 349 | function () { return m[1] & m[2] | m[1] & m[3] | m[2] & m[3]; }, 350 | function () { return m[1] ^ m[2] ^ m[3]; } 351 | ], rol = function (n, c) { return n << c | n >>> (32 - c); }, 352 | k = [1518500249, 1859775393, -1894007588, -899497514], 353 | m = [1732584193, -271733879, null, null, -1009589776]; 354 | m[2] = ~m[0], m[3] = ~m[1]; 355 | for (i = 0; i < s.length; i += 16) { 356 | var o = m.slice(0); 357 | for (j = 0; j < 80; j++) 358 | w[j] = j < 16 ? s[i + j] : rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1), 359 | t = rol(m[0], 5) + f[j / 20 | 0]() + m[4] + w[j] + k[j / 20 | 0] | 0, 360 | m[1] = rol(m[1], 30), m.pop(), m.unshift(t); 361 | for (j = 0; j < 5; j++)m[j] = m[j] + o[j] | 0; 362 | }; 363 | t = new DataView(new Uint32Array(m).buffer); 364 | for (var i = 0; i < 5; i++)m[i] = t.getUint32(i << 2); 365 | 366 | var hex = Array.prototype.map.call(new Uint8Array(new Uint32Array(m).buffer), function (e) { 367 | return (e < 16 ? "0" : "") + e.toString(16); 368 | }).join(""); 369 | return hex; 370 | } 371 | function encodeUTF8(s) { 372 | var i, r = [], c, x; 373 | for (i = 0; i < s.length; i++) 374 | if ((c = s.charCodeAt(i)) < 0x80) r.push(c); 375 | else if (c < 0x800) r.push(0xC0 + (c >> 6 & 0x1F), 0x80 + (c & 0x3F)); 376 | else { 377 | if ((x = c ^ 0xD800) >> 10 == 0) //对四字节UTF-16转换为Unicode 378 | c = (x << 10) + (s.charCodeAt(++i) ^ 0xDC00) + 0x10000, 379 | r.push(0xF0 + (c >> 18 & 0x7), 0x80 + (c >> 12 & 0x3F)); 380 | else r.push(0xE0 + (c >> 12 & 0xF)); 381 | r.push(0x80 + (c >> 6 & 0x3F), 0x80 + (c & 0x3F)); 382 | }; 383 | return r; 384 | } 385 | 386 | /** 387 | * SHA256 加密 388 | */ 389 | function SHA256_Encrypt(data) { 390 | sha256_init(); 391 | sha256_update(data, data.length); 392 | sha256_final(); 393 | return sha256_encode_hex(); 394 | } 395 | /* SHA256 logical functions */ function rotateRight(n, x) { return (x >>> n) | (x << (32 - n)); } function choice(x, y, z) { return (x & y) ^ (~x & z); } function majority(x, y, z) { return (x & y) ^ (x & z) ^ (y & z); } function sha256_Sigma0(x) { return rotateRight(2, x) ^ rotateRight(13, x) ^ rotateRight(22, x); } function sha256_Sigma1(x) { return rotateRight(6, x) ^ rotateRight(11, x) ^ rotateRight(25, x); } function sha256_sigma0(x) { return rotateRight(7, x) ^ rotateRight(18, x) ^ (x >>> 3); } function sha256_sigma1(x) { return rotateRight(17, x) ^ rotateRight(19, x) ^ (x >>> 10); } function sha256_expand(W, j) { return (W[j & 0x0f] += sha256_sigma1(W[(j + 14) & 0x0f]) + W[(j + 9) & 0x0f] + sha256_sigma0(W[(j + 1) & 0x0f])); } /* Hash constant words K: */ var K256 = new Array(0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2); /* global arrays */ var ihash, count, buffer; var sha256_hex_digits = "0123456789abcdef"; /* Add 32-bit integers with 16-bit operations (bug in some JS-interpreters: overflow) */ function safe_add(x, y) { var lsw = (x & 0xffff) + (y & 0xffff); var msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xffff); } /* Initialise the SHA256 computation */ function sha256_init() { ihash = new Array(8); count = new Array(2); buffer = new Array(64); count[0] = count[1] = 0; ihash[0] = 0x6a09e667; ihash[1] = 0xbb67ae85; ihash[2] = 0x3c6ef372; ihash[3] = 0xa54ff53a; ihash[4] = 0x510e527f; ihash[5] = 0x9b05688c; ihash[6] = 0x1f83d9ab; ihash[7] = 0x5be0cd19; } /* Transform a 512-bit message block */ function sha256_transform() { var a, b, c, d, e, f, g, h, T1, T2; var W = new Array(16); /* Initialize registers with the previous intermediate value */ a = ihash[0]; b = ihash[1]; c = ihash[2]; d = ihash[3]; e = ihash[4]; f = ihash[5]; g = ihash[6]; h = ihash[7]; /* make 32-bit words */ for (var i = 0; i < 16; i++) W[i] = buffer[(i << 2) + 3] | (buffer[(i << 2) + 2] << 8) | (buffer[(i << 2) + 1] << 16) | (buffer[i << 2] << 24); for (var j = 0; j < 64; j++) { T1 = h + sha256_Sigma1(e) + choice(e, f, g) + K256[j]; if (j < 16) T1 += W[j]; else T1 += sha256_expand(W, j); T2 = sha256_Sigma0(a) + majority(a, b, c); h = g; g = f; f = e; e = safe_add(d, T1); d = c; c = b; b = a; a = safe_add(T1, T2); } /* Compute the current intermediate hash value */ ihash[0] += a; ihash[1] += b; ihash[2] += c; ihash[3] += d; ihash[4] += e; ihash[5] += f; ihash[6] += g; ihash[7] += h; } /* Read the next chunk of data and update the SHA256 computation */ function sha256_update(data, inputLen) { var i, index, curpos = 0; /* Compute number of bytes mod 64 */ index = (count[0] >> 3) & 0x3f; var remainder = inputLen & 0x3f; /* Update number of bits */ if ((count[0] += inputLen << 3) < inputLen << 3) count[1]++; count[1] += inputLen >> 29; /* Transform as many times as possible */ for (i = 0; i + 63 < inputLen; i += 64) { for (var j = index; j < 64; j++) buffer[j] = data.charCodeAt(curpos++); sha256_transform(); index = 0; } /* Buffer remaining input */ for (var j = 0; j < remainder; j++) buffer[j] = data.charCodeAt(curpos++); } /* Finish the computation by operations such as padding */ function sha256_final() { var index = (count[0] >> 3) & 0x3f; buffer[index++] = 0x80; if (index <= 56) { for (var i = index; i < 56; i++) buffer[i] = 0; } else { for (var i = index; i < 64; i++) buffer[i] = 0; sha256_transform(); for (var i = 0; i < 56; i++) buffer[i] = 0; } buffer[56] = (count[1] >>> 24) & 0xff; buffer[57] = (count[1] >>> 16) & 0xff; buffer[58] = (count[1] >>> 8) & 0xff; buffer[59] = count[1] & 0xff; buffer[60] = (count[0] >>> 24) & 0xff; buffer[61] = (count[0] >>> 16) & 0xff; buffer[62] = (count[0] >>> 8) & 0xff; buffer[63] = count[0] & 0xff; sha256_transform(); } /* Split the internal hash values into an array of bytes */ function sha256_encode_bytes() { var j = 0; var output = new Array(32); for (var i = 0; i < 8; i++) { output[j++] = (ihash[i] >>> 24) & 0xff; output[j++] = (ihash[i] >>> 16) & 0xff; output[j++] = (ihash[i] >>> 8) & 0xff; output[j++] = ihash[i] & 0xff; } return output; } /* Get the internal hash as a hex string */ function sha256_encode_hex() { var output = new String(); for (var i = 0; i < 8; i++) { for (var j = 28; j >= 0; j -= 4) output += sha256_hex_digits.charAt((ihash[i] >>> j) & 0x0f); } return output; } 396 | 397 | /** 398 | * md5 加密 399 | */ 400 | function MD5_Encrypt(a) { function b(a, b) { return (a << b) | (a >>> (32 - b)); } function c(a, b) { var c, d, e, f, g; return ((e = 2147483648 & a), (f = 2147483648 & b), (c = 1073741824 & a), (d = 1073741824 & b), (g = (1073741823 & a) + (1073741823 & b)), c & d ? 2147483648 ^ g ^ e ^ f : c | d ? 1073741824 & g ? 3221225472 ^ g ^ e ^ f : 1073741824 ^ g ^ e ^ f : g ^ e ^ f); } function d(a, b, c) { return (a & b) | (~a & c); } function e(a, b, c) { return (a & c) | (b & ~c); } function f(a, b, c) { return a ^ b ^ c; } function g(a, b, c) { return b ^ (a | ~c); } function h(a, e, f, g, h, i, j) { return (a = c(a, c(c(d(e, f, g), h), j))), c(b(a, i), e); } function i(a, d, f, g, h, i, j) { return (a = c(a, c(c(e(d, f, g), h), j))), c(b(a, i), d); } function j(a, d, e, g, h, i, j) { return (a = c(a, c(c(f(d, e, g), h), j))), c(b(a, i), d); } function k(a, d, e, f, h, i, j) { return (a = c(a, c(c(g(d, e, f), h), j))), c(b(a, i), d); } function l(a) { for (var b, c = a.length, d = c + 8, e = (d - (d % 64)) / 64, f = 16 * (e + 1), g = new Array(f - 1), h = 0, i = 0; c > i;) (b = (i - (i % 4)) / 4), (h = (i % 4) * 8), (g[b] = g[b] | (a.charCodeAt(i) << h)), i++; return ((b = (i - (i % 4)) / 4), (h = (i % 4) * 8), (g[b] = g[b] | (128 << h)), (g[f - 2] = c << 3), (g[f - 1] = c >>> 29), g); } function m(a) { var b, c, d = "", e = ""; for (c = 0; 3 >= c; c++) (b = (a >>> (8 * c)) & 255), (e = "0" + b.toString(16)), (d += e.substr(e.length - 2, 2)); return d; } function n(a) { a = a.replace(/\r\n/g, "\n"); for (var b = "", c = 0; c < a.length; c++) { var d = a.charCodeAt(c); 128 > d ? (b += String.fromCharCode(d)) : d > 127 && 2048 > d ? ((b += String.fromCharCode((d >> 6) | 192)), (b += String.fromCharCode((63 & d) | 128))) : ((b += String.fromCharCode((d >> 12) | 224)), (b += String.fromCharCode(((d >> 6) & 63) | 128)), (b += String.fromCharCode((63 & d) | 128))); } return b; } var o, p, q, r, s, t, u, v, w, x = [], y = 7, z = 12, A = 17, B = 22, C = 5, D = 9, E = 14, F = 20, G = 4, H = 11, I = 16, J = 23, K = 6, L = 10, M = 15, N = 21; for (a = n(a), x = l(a), t = 1732584193, u = 4023233417, v = 2562383102, w = 271733878, o = 0; o < x.length; o += 16) (p = t), (q = u), (r = v), (s = w), (t = h(t, u, v, w, x[o + 0], y, 3614090360)), (w = h(w, t, u, v, x[o + 1], z, 3905402710)), (v = h(v, w, t, u, x[o + 2], A, 606105819)), (u = h(u, v, w, t, x[o + 3], B, 3250441966)), (t = h(t, u, v, w, x[o + 4], y, 4118548399)), (w = h(w, t, u, v, x[o + 5], z, 1200080426)), (v = h(v, w, t, u, x[o + 6], A, 2821735955)), (u = h(u, v, w, t, x[o + 7], B, 4249261313)), (t = h(t, u, v, w, x[o + 8], y, 1770035416)), (w = h(w, t, u, v, x[o + 9], z, 2336552879)), (v = h(v, w, t, u, x[o + 10], A, 4294925233)), (u = h(u, v, w, t, x[o + 11], B, 2304563134)), (t = h(t, u, v, w, x[o + 12], y, 1804603682)), (w = h(w, t, u, v, x[o + 13], z, 4254626195)), (v = h(v, w, t, u, x[o + 14], A, 2792965006)), (u = h(u, v, w, t, x[o + 15], B, 1236535329)), (t = i(t, u, v, w, x[o + 1], C, 4129170786)), (w = i(w, t, u, v, x[o + 6], D, 3225465664)), (v = i(v, w, t, u, x[o + 11], E, 643717713)), (u = i(u, v, w, t, x[o + 0], F, 3921069994)), (t = i(t, u, v, w, x[o + 5], C, 3593408605)), (w = i(w, t, u, v, x[o + 10], D, 38016083)), (v = i(v, w, t, u, x[o + 15], E, 3634488961)), (u = i(u, v, w, t, x[o + 4], F, 3889429448)), (t = i(t, u, v, w, x[o + 9], C, 568446438)), (w = i(w, t, u, v, x[o + 14], D, 3275163606)), (v = i(v, w, t, u, x[o + 3], E, 4107603335)), (u = i(u, v, w, t, x[o + 8], F, 1163531501)), (t = i(t, u, v, w, x[o + 13], C, 2850285829)), (w = i(w, t, u, v, x[o + 2], D, 4243563512)), (v = i(v, w, t, u, x[o + 7], E, 1735328473)), (u = i(u, v, w, t, x[o + 12], F, 2368359562)), (t = j(t, u, v, w, x[o + 5], G, 4294588738)), (w = j(w, t, u, v, x[o + 8], H, 2272392833)), (v = j(v, w, t, u, x[o + 11], I, 1839030562)), (u = j(u, v, w, t, x[o + 14], J, 4259657740)), (t = j(t, u, v, w, x[o + 1], G, 2763975236)), (w = j(w, t, u, v, x[o + 4], H, 1272893353)), (v = j(v, w, t, u, x[o + 7], I, 4139469664)), (u = j(u, v, w, t, x[o + 10], J, 3200236656)), (t = j(t, u, v, w, x[o + 13], G, 681279174)), (w = j(w, t, u, v, x[o + 0], H, 3936430074)), (v = j(v, w, t, u, x[o + 3], I, 3572445317)), (u = j(u, v, w, t, x[o + 6], J, 76029189)), (t = j(t, u, v, w, x[o + 9], G, 3654602809)), (w = j(w, t, u, v, x[o + 12], H, 3873151461)), (v = j(v, w, t, u, x[o + 15], I, 530742520)), (u = j(u, v, w, t, x[o + 2], J, 3299628645)), (t = k(t, u, v, w, x[o + 0], K, 4096336452)), (w = k(w, t, u, v, x[o + 7], L, 1126891415)), (v = k(v, w, t, u, x[o + 14], M, 2878612391)), (u = k(u, v, w, t, x[o + 5], N, 4237533241)), (t = k(t, u, v, w, x[o + 12], K, 1700485571)), (w = k(w, t, u, v, x[o + 3], L, 2399980690)), (v = k(v, w, t, u, x[o + 10], M, 4293915773)), (u = k(u, v, w, t, x[o + 1], N, 2240044497)), (t = k(t, u, v, w, x[o + 8], K, 1873313359)), (w = k(w, t, u, v, x[o + 15], L, 4264355552)), (v = k(v, w, t, u, x[o + 6], M, 2734768916)), (u = k(u, v, w, t, x[o + 13], N, 1309151649)), (t = k(t, u, v, w, x[o + 4], K, 4149444226)), (w = k(w, t, u, v, x[o + 11], L, 3174756917)), (v = k(v, w, t, u, x[o + 2], M, 718787259)), (u = k(u, v, w, t, x[o + 9], N, 3951481745)), (t = c(t, p)), (u = c(u, q)), (v = c(v, r)), (w = c(w, s)); var O = m(t) + m(u) + m(v) + m(w); return O.toLowerCase(); } --------------------------------------------------------------------------------