前言
之前很多用户提过,jsjiami.v7加密后体积过大,于是有了本文,一些对js加密压缩的想法。
思路1.关于字符字节长度的区别
// 要计算字节长度的字符串
var str = "你好,世界!";
// 使用 TextEncoder 对字符串进行编码
var encoder = new TextEncoder();
var encodedBytes = encoder.encode(str);
// 字节长度为编码后字节数组的长度
var byteLength = encodedBytes.byteLength;
console.log("字符串的字节长度为:", byteLength);
中文字符和符号一般占用3个字节,英文是1个字节。各位自行尝试,我在想,是否可以将字节长的字符转换成字节少的字符,这样可以小幅度节省代码体积。
思路2.关于特定关键词的转换
// 创建一个映射表,将特定关键词映射到一个字节的字符
var keywordMap = {
'function': 'ƒ', // 例如,将 'function' 映射到 'ƒ'
'if': '¡', // 将 'if' 映射到 '¡'
// 添加更多映射关系...
};
// 将 JavaScript 代码中的特定关键词替换为映射表中的字符
function compressCode(code) {
for (var keyword in keywordMap) {
if (keywordMap.hasOwnProperty(keyword)) {
var pattern = new RegExp('\\b' + keyword + '\\b', 'g');
code = code.replace(pattern, keywordMap[keyword]);
}
}
return code;
}
// 将特定关键词的字符替换回原始的关键词
function decompressCode(compressedCode) {
for (var keyword in keywordMap) {
if (keywordMap.hasOwnProperty(keyword)) {
var pattern = new RegExp('\\b' + keywordMap[keyword] + '\\b', 'g');
compressedCode = compressedCode.replace(pattern, keyword);
}
}
return compressedCode;
}
// 示例 JavaScript 代码
var originalCode = `
function greet() {
if (true) {
console.log("Hello, World!");
}
}
greet();
`;
// 使用压缩算法进行压缩
var compressedCode = compressCode(originalCode);
console.log('压缩后的代码:\n', compressedCode);
// 使用解压缩算法进行解压缩
var decompressedCode = decompressCode(compressedCode);
console.log('解压缩后的代码:\n', decompressedCode);
eval(decompressedCode); // 执行解压缩后的代码
将所有长度固定的关键词转换成其他占用更小的字符,但是需要注意的是,防止客户自己有字符,导致转码错误。
结语
关于js加密压缩的思路就这么多,准备这段时间去实现一下,尽快解决体积问题。这样可以在不牺牲安全的情况下尽量缩小体积。如果各位有更好的思路也可以一起分享在评论区互相讨论。感谢。
如js加密源代码丢失,jsjiami客服可以在线人工js解密。