壹影博客.
我在下午4点钟开始想你
Js字符串转Unicode-防小白
  • 2023-2-15日
  • 0评论
  • 576围观

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 还可以配合其他的混淆放在一起对函数名,变量进行编码可以起到隐藏的作用

发表评论