隐形符号复制(隐形符号大全复制粘贴)

JavaScript:不可见字符本文分享一个奇怪的JS编程技巧,可以让字符串“隐形”不可见!效果展示如下图所示,一个字符串被其他东西操作后有621字节长,但是它

JavaScript:不可见字符

隐形符号复制(隐形符号大全复制粘贴)

本文分享一个奇怪的JS编程技巧,可以让字符串“隐形”不可见!

效果展示

如下图所示,一个字符串被其他东西操作后有621字节长,但是它的内容是不可见的!

功能用途

这项技术可以应用到很多领域,非常实用。

例如:代码加密、数据加密、文本隐藏、内容保密、隐形水印等等。

原理介绍

要实现字符串不可见,技术原理是“零宽度字符”。

什么是“零宽字符”?

在Unicode编码中,有一类奇怪的字符格式,不可见,不可打印,主要用于调整字符的显示格式。

常见的零宽度字符类型:

空网格符号:格式为U+200B,用于较长字符的换行符分隔;

不破空格:格式为U+FEFF,用于防止特定位置断行;

断字:格式为U+200D,用于阿拉伯语、印度语等语言,使字符之间不用断字也能产生断字效果;

断字:格式为U+200C,用于阿拉伯语、德语、印度语等语言,防止有断字的字符之间出现断字效应;

从左向右符号:格式为U+200E,用于指定混合文字方向的多语言文本中,排版字符的书写方向为从左向右;

从右向左符号:格式为U+200F:用于指定混合文字方向的多语言文本中,排版字符的书写方向为从右向左;

编程实现隐形字符功能时,先将字符串转换成二进制,再将二进制中的1转换成\ u200b0被转换为\ u200c空网格转换为\u200d,最后使用\ufeff零宽度完整空网格作为分隔符。这些unicode字符是不可见的,所以经过最后的转换和组合,就会形成一个不可见的字符串。

功能源码

函数text _ 2 _ binary(text){ return text . split(& # 39;').map(function(char){ return char . charcode at(0)。toString(2)})。加入(& # 39;');} function binary _ 2 _ hidden _ text(binary){ return binary . split(& # 39;').map(function(binary _ num){ var num = parse int(binary _ num,10);if(num = = = 1){ return & # 39;\ u200b & # 39;} else if(num = = = 0){ return & # 39;\ u200c & # 39;} return & # 39\ u200d & # 39;}).加入(& # 39;\ ufeff & # 39)} var text = & # 34Jshaman是一款专业而强大的JS代码混淆加密工具& # 34;;var binary _ text = text _ 2 _ binary(text);var hidden _ text = binary _ 2 _ hidden _ text(binary _ text);console . log(& # 34;原始字符串:& # 34;,正文);console . log(& # 34;二进制:& # 34;,binary _ text);console . log(& # 34;隐藏字符:& # 34;,hidden_text,& # 34;隐藏字符长度:& # 34;,hidden _ text . length);隐形还原接下来,我将介绍如何还原“隐形”后的内容。

了解了上面的内容,我们就知道了字符不可见的原理,再结合源代码就可以知道,恢复不可见的内容就是逆向操作:将不可见的unicode编码转换成二进制,再将二进制转换成原始字符。

直接给出源代码:

function hidden _ text _ 2 _ binary(string){ return string . split(& # 39;\ ufeff & # 39).map(function(char){ if(char = = = & # 39;\ u200b & # 39){ return & # 391';} else if(char = = = & # 39;\ u200c & # 39){ return & # 390';} return & # 39';}).加入(& # 39;')}函数binary _ 2 _ Text(binary str){ var Text = & # 34;"binary str . split(& # 39;').map(function(num){ text+= string . from charcode(parse int(num,2));}).加入(& # 39;');返回text . tostring();} console . log(& # 34;隐藏字符到二进制:& # 34;,hidden_text_2_binary(隐藏_文本));console . log(& # 34;二进制到原始字符:& # 34;,binary _ 2 _ Text(hidden _ Text _ 2 _ binary(hidden _ Text)));操作效果:

如果在代码中直接提供“不可见”字符的内容,比如ajax通信,将“不可见”字符从后端传输到前端,并通过上述解密方法还原,那么这样传输的内容会非常隐秘。

但还是存在一个安全问题:别人看JS源代码就能看到解密函数,可能导致加密方法泄露,加解密方法被推导出来。

为了解决这个问题,可以使用JS代码混淆加密来进一步提高整体JS代码的安全性。

JS代码加密

用JShaman对上述两个解密函数进行代码混淆加密。

如下图,进入JShaman的网站,粘贴要加密的JS代码:

使用以下配置:

获取加密的JS代码:

将代码粘贴回源文件:

加密的JS代码运行起来和以前完全一样。

但此时,它已经不再是一段赤裸裸的透明JS代码,很难从这段混乱复杂的代码中看出功能逻辑。

注:“隐形字符”技术可以用在前端和后端JS执行环境中,即可以在Node中执行。JS或在浏览器中使用。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/421213.html

发表回复

登录后才能评论