如何从TYPO3的JS解码函数推导对应编码函数?
实现TYPO3 CMS linkTo_UnCryptMailto对应的编码函数encodeMyString
先拆解解码逻辑:decodeMyString 核心是调用 decryptString 并传入偏移量 -3,也就是对指定字符集中的每个字符**减3(循环补位)完成解密。编码逻辑只需反向操作,对同一字符集内的字符加3(循环补位)**即可。
以下是对应的编码实现:
/// 加密辅助函数 function encryptCharcode(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); } /// 加密字符串 function encryptString(dec, offset) { var enc = ""; var len = dec.length; for(var i=0; i < len; i++) { var n = dec.charCodeAt(i); if (n >= 0x2B && n <= 0x3A) { enc += encryptCharcode(n, 0x2B, 0x3A, offset); // 0-9 . , - + / : } else if (n >= 0x40 && n <= 0x5A) { enc += encryptCharcode(n, 0x40, 0x5A, offset); // A-Z @ } else if (n >= 0x61 && n <= 0x7A) { enc += encryptCharcode(n, 0x61, 0x7A, offset); // a-z } else { enc += dec.charAt(i); } } return enc; } /// 主编码函数 function encodeMyString(s) { console.log( encryptString(s, 3) ); }
关键说明
- 编码偏移量用
3,与解码的-3完全对称,确保编码后的数据能被原解码函数正确还原 - 仅处理和解码逻辑一致的三类字符区间,其余字符直接保留,不做修改
- 循环补位逻辑与解码辅助函数完全相同,仅偏移方向相反
验证示例
比如对字符串 test@example.com 执行编码,将得到的结果传入原 decodeMyString 函数,会完整还原出原字符串,证明逻辑匹配。
内容的提问来源于stack exchange,提问作者Fred F.
相关产品推荐
相关产品推荐

