PHP Authcode 函数转换为 JavaScript 代码
function authcode(mystr, operation = 'DECODE', key = '', expiry = 0) {
const ckey_length = 4;
key = md5(key);
const keya = md5(key.substring(0, 16));
const keyb = md5(key.substring(16, 32));
const keyc = ckey_length && operation === 'DECODE' ? mystr.substring(0, ckey_length) : substr(md5(Date.now().toString()), -ckey_length);
const cryptkey = keya + md5(keya + keyc);
const key_length = cryptkey.length;
mystr = operation === 'DECODE' ? atob(mystr.substring(ckey_length)) : ${expiry ? expiry + Date.now() : '0000000000'}${md5(mystr + keyb).substring(0, 16)}${mystr};
const mystr_length = mystr.length;
let result = '';
const box = Array.from({ length: 256 }, (, i) => i);
const rndkey = Array.from({ length: 256 }, (, i) => cryptkey.charCodeAt(i % key_length));
for (let j = 0, 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 = 0,
j = 0;
for (let 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.substring(0, 10) === '0' || parseInt(result.substring(0, 10)) - Date.now() > 0) && result.substring(10, 26) === md5(result.substring(26) + keyb).substring(0, 16)) {
return result.substring(26);
} else {
return '';
}
} else {
return keyc + btoa(result).replace(/=/g, '');
}
}
原文地址: https://www.cveoy.top/t/topic/nc7H 著作权归作者所有。请勿转载和采集!