发布网友 发布时间:2022-03-08 17:06
共1个回答
热心网友 时间:2022-03-08 18:36
这不算加密,只不过一眼看不出来罢了。其实就是JavaScript字符串转义。
原理很简单,比如字符 ’w‘
它的 charCode 是 119 十六进制表示为 0x77
然后利用 JavaScript 字符串转义前缀 \x,表达出编码过的 ASCII 字符来:
\x + charCode的十六进制表示(两位)所以字符串 '\x77' 就是字符串 'w'
也就是说
'\x77' === 'w'这个的返回值是 true,二者完全等效!
这是对于 ascii 代码表示形式,charCode 大于 255 的怎么处理?就要用到 \u 前缀了
\u + charCode的十六进制表示(比如汉字 '学' 的 charCode 是 23398 (0x5b66)
书写时只要把 0x 替换为 \u:
\u5b66这样就可以了。
'\u5b66' === '学'那么为什么要这么麻烦呢?直接输入字符不就好了吗?要知道,有些字符是不能打印或不能被输入的(比如功能/控制字符“退格”等),如果要在字符串中包含这些字符,只能依靠字符串转义了!
回头看楼主给的代码:
"\x64\x6f\x63\x75\x6d\x65\x6e\x74"这个是什么?
F12开浏览器开发者工具,切到控制台(或者你有 node.js),在控制台输入这一串。
你看到输出什么了吗?
"document"继续
"\x77\x72\x69\x74\x65\x6c\x6e"这个输入后,控制台返回
"writeln"剩下括号内的也是一样的啦。结果是一个指向特定地址的 <a> 标签。
所以翻译过来就是
window['document']['writeln']('<a href="...">标签</a>')看懂了?
好,既然楼主说要怎么加密的。我就写了个 JS 脚本,只要调用这个方法,你就得到“加密”后的字符串信息了:
function encrypt(str) {在控制台执行
返回
"\x3c\x61\x20\x68\x72\x65\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x63\x63\x79\x6d\x6b\x2e\x63\x6f\x6d\x2f\x22\x20\x74\x61\x72\x67\x65\x74\x3d\x22\x5f\x62\x6c\x61\x6e\x6b\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x23\x46\x46\x30\x30\x30\x30\x3b\x22\x3e\x3c\x62\x3e\x43\x43\u6e90\u7801\u8bba\u575b\x3c\x2f\x62\x3e\x3c\x2f\x61\x3e"楼主只要把括号中的那一串替换为上面输入的内容就好了。