在一些网络项目中我发现了一些 JavaScript 中的 DECODE 函数。
那就是解密一些混淆的字符串。
我丢失了匹配对应项的源代码 - ENCODE 函数。
我只是不知道如何从解码逻辑中推断出它。
/// decrypt helper function
function decryptCharcode(n, start, end, offset) {
n = n + offset;
if (offset > 0 && n > end) {
n = start + (n - end - 1);
} else if (offset < 0 && n < start) {
n = end - (start - n - 1);
}
return String.fromCharCode(n);
}
/// decrypt string
function decryptString(enc, offset) {
var dec = "";
var len = enc.length;
for(var i=0; i < len; i++) {
var n = enc.charCodeAt(i);
if (n >= 0x2B && n <= 0x3A) {
dec += decryptCharcode(n, 0x2B, 0x3A, offset); // 0-9 . , - + / :
} else if (n >= 0x40 && n <= 0x5A) {
dec += decryptCharcode(n, 0x40, 0x5A, offset); // A-Z @
} else if (n >= 0x61 && n <= 0x7A) {
dec += decryptCharcode(n, 0x61, 0x7A, offset); // a-z
} else {
dec += enc.charAt(i);
}
}
return dec;
}
/// the main function
function decodeMyString(s) {
console.log( decryptString(s, -3) );
}
代码中有“decodeMyString”。
我不知道如何编码对应的“encodeMyString”。
我已经在网上搜索过了。 “解码”实际上是由 TYPO3 CMS 作为一些名为“linkTo_UnCryptMailto”的函数生成的。 但我无法找出它是如何进行“编码”的。
这是一个旋转密码。偏移量为 -3 时,“a”始终显示为“x”,“b”显示为“y”,“c”显示为“z”,“d”显示为“a”,依此类推。
您的“加密”函数可能只是“解密”函数的反向偏移量:
function encodeMyString(s) {
console.log( decryptString(s, 3) );
}