function getCodes(value, fixValue, length) {
let codes = new Array(length).fill(fixValue);
let buffers = new TextEncoder().encode(value);
for (let i = 0; i < Math.min(buffers.length, length); i++) {
codes[i] = buffers[i];
}
return codes;
}
function formatString(value, format) {
return value.toString().padStart(format.length, '0');
}
function getCodes2(value, segmentLength) {
let list = [];
for (let i = 0; i < value.length; i += segmentLength) {
let item = value.slice(i, i + segmentLength);
list.push(item);
}
return list;
}
function shift(codes) {
for (let i = 0; i < codes.length; i += 2) {
[codes[i], codes[i + 1]] = [codes[i + 1], codes[i]];
}
return codes;
}
function plus(a, b) {
let result = [];
for (let i = 0; i < a.length; i++) {
result.push((a[i] + b[i]) % 1000);
}
return result;
}
const TOTAL_CODES_LEN = 80;
const original = '123';
const key = 'dsc28682266'
if (original.length > TOTAL_CODES_LEN) {
throw new Error("Original length exceeds TOTAL_CODES_LEN");
}
let oriValue = getCodes(original, 1, TOTAL_CODES_LEN);
let keyValue = getCodes(key, 11, TOTAL_CODES_LEN);
let encryptValue = plus(oriValue.map(Number), keyValue.map(Number));
let encryptString = encryptValue.map(v => formatString(v, '000')).join('');
let codes = getCodes2(encryptString, 4);
codes = shift(codes);
encryptString = codes.join('');
codes = getCodes2(encryptString, 3);
let tempString = '';
for (let item of codes) {
let code = parseInt(item, 10);
if ((code >= 65 && code <= 90) || (code >= 97 && code <= 122)) {
tempString += String.fromCharCode(code);
} else {
tempString += item;
}
}
console.log(tempString);