Js字符串转Unicode
一般情况下,js的代码加密用来加密混淆代码,降低代码的可读性,如果一段没有经过任何加密混淆的代码,很容易被第三方或者脚本破解利用,引发许多的安全问题,本文将从以下多个角度讲解,代码加密的一些基本原理,其中unicode编码就是非常简单的一种方式。
Unicode一般指统一码。 统一码(Unicode),也叫万国码、单一码,由统一码联盟开发,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。统一码是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
直接上代码吧
function unicode(str){
var value='';
for (var i = 0; i < str.length; i++) {
value += '\\u' + left_zero_4(parseInt(str.charCodeAt(i)).toString(16));
}
return value;
}
function left_zero_4(str) {
if (str != null && str != '' && str != 'undefined') {
if (str.length == 2) {
return '00' + str;
}
}
return str;
}
console.log(unicode("壹影博客"))
//返回 \u58f9\u5f71\u535a\u5ba2
Unicode不仅仅限于字符串也可以作为函数名直接执行,例如:
var \u0062\u0062\u0063\u0063=function(argument) {
console.log("\u58f9\u5f71\u535a\u5ba2")
}
\u0062\u0062\u0063\u0063()
//执行结果输出 壹影博客
//编码前是
var bbcc=function(argument) {
console.log("壹影博客")
}
bbcc()
//我们也可以在编码之后用函数名去调用也是可以的比如:
var \u0062\u0062\u0063\u0063=function(argument) {
console.log("\u58f9\u5f71\u535a\u5ba2")
}
bbcc()
//结果依然打印 壹影博客
unicode 还原
还原也比较简单,用如下函数
function reconvert(str){
str = str.replace(/(\\u)(\w{1,4})/gi,function($0){
return (String.fromCharCode(parseInt((escape($0).replace(/(%5Cu)(\w{1,4})/g,"$2")),16)));
});
str = str.replace(/(&#x)(\w{1,4});/gi,function($0){
return String.fromCharCode(parseInt(escape($0).replace(/(%26%23x)(\w{1,4})(%3B)/g,"$2"),16));
});
str = str.replace(/(&#)(\d{1,6});/gi,function($0){
return String.fromCharCode(parseInt(escape($0).replace(/(%26%23)(\d{1,6})(%3B)/g,"$2")));
});
return str;
}
reconvert("\u0031\u0032\u0033\u0034\u0035\u0036")
//打印"123456"
这个Unicode 在Js开发的加密中应用的不多,但是可以尝试,防小白还是可以的,此外呢unicode 还可以配合其他的混淆放在一起对函数名,变量进行编码可以起到隐藏的作用
发表评论