JavaScript 代码实现 authcode 加解密算法
function authcode(mystr, operation = 'DECODE', key = '', expiry = 0) { const ckey_length = 4; key = md5(key); const keya = md5(key.substr(0, 16)); const keyb = md5(key.substr(16, 16)); const keyc = ckey_length ? (operation === 'DECODE' ? mystr.substr(0, ckey_length) : randomkeys(ckey_length)) : ''; const cryptkey = keya + md5(keya + keyc); const key_length = cryptkey.length; mystr = operation === 'DECODE' ? atob(mystr.substr(ckey_length)) : sprintf('%010d', expiry ? expiry + Date.now() : 0) + md5(mystr + keyb).substr(0, 16) + mystr; const mystr_length = mystr.length; let result = ''; const box = [...Array(256).keys()]; const rndkey = []; for (let i = 0; i <= 255; i++) { rndkey[i] = cryptkey.charCodeAt(i % key_length); } for (let j = i = 0; i < 256; i++) { j = (j + box[i] + rndkey[i]) % 256; const tmp = box[i]; box[i] = box[j]; box[j] = tmp; } let a, b; for (a = j = i = 0; i < mystr_length; i++) { a = (a + 1) % 256; j = (j + box[a]) % 256; const tmp = box[a]; box[a] = box[j]; box[j] = tmp; result += String.fromCharCode(mystr.charCodeAt(i) ^ box[(box[a] + box[j]) % 256]); } if (operation === 'DECODE') { if ((result.substr(0, 10) == 0 || result.substr(0, 10) - Date.now() > 0) && result.substr(10, 16) == md5(result.substr(26) + keyb).substr(0, 16)) { return result.substr(26); } else { return ''; } } else { return keyc + btoa(result).replace(/=/g, ''); } }
function randomkeys(length) { const pattern = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; let key = ''; for (let i = 0; i < length; i++) { key += pattern.charAt(Math.floor(Math.random() * 36)); } return key; }
原文地址: https://www.cveoy.top/t/topic/nc7S 著作权归作者所有。请勿转载和采集!