技术原理:
JavaScript奇技淫巧:隐形字符_w2sfot的博客-CSDN博客
源码:
<html>
<h2>字符串隐身术</h2>
<textarea id="code" style="font-size:9px; height:500px; width: 600px;">
console.log = function(){
for(i=0; i<arguments.length;i++){
document.getElementById("log").innerHTML += arguments[i];
}
document.getElementById("log").innerHTML += "<br>";
}
function text_2_binary(text){
return text.split('').map(function(char){ return char.charCodeAt(0).toString(2)}).join(' ');
}
function binary_2_hidden_text(binary){
return binary.split('').map(function (binary_num){
var num = parseInt(binary_num, 10);
if (num === 1) {
return '\u200b';
} else if(num===0) {
return '\u200c';
}
return '\u200d';
}).join('\ufeff')
}
var text = "jshaman是专业且强大的JS代码混淆加密工具";
var binary_text = text_2_binary(text);
var hidden_text = binary_2_hidden_text(binary_text);
console.log("原始字符串:",text);
console.log("二进制:",binary_text);
console.log("<h2>隐藏字符:</h2>",hidden_text,"隐藏字符长度:",hidden_text.length);
function hidden_text_2_binary(string){
return string.split('\ufeff').map(function(char){
if (char === '\u200b') {
return '1';
} else if(char === '\u200c') {
return '0';
}
return ' ';
}).join('')
}
function binary_2_Text(binaryStr){
var text = ""
binaryStr.split(' ').map(function(num){
text += String.fromCharCode(parseInt(num, 2));
}).join('');
return text.toString();
}
console.log("隐形字符转二进制:",hidden_text_2_binary(hidden_text));
console.log("二进制转原始字符:",binary_2_Text(hidden_text_2_binary(hidden_text)));
</textarea>
<br>
<button onclick="eval(document.getElementById('code').value);">执行JS代码</button>
<br>
<div id="log"></div>
</html>