前言
前篇给大家介绍了运算符不为人知的基础知识。他们的各种表达形式,今天我们从这个基础上,继续进一步告诉大家,如何对字符串进行加密处理。还是那句话,技术人不废话,直接晒代码。
示例源代码
// 字符串加密示例
let str = "Hello World";
// 加密
let encryptedString = [
[] + [] + [] + [] + [] + [] + [] + [],
![] + [] + [] + [] + [] + [] + [] + [],
!![] + [] + [] + [] + [] + [] + [] + [],
+[] + [] + [] + [] + [] + [] + [] + [],
-[] + [] + [] + [] + [] + [] + [] + [],
~[] + [] + [] + [] + [] + [] + [] + []
].join("");
console.log(encryptedString); // 输出:"[object Object]undefinedtrue0-0-1"
// 解密
let decryptedString = eval("String.fromCharCode(" + encryptedString.match(/\d+/g).join(",") + ")");
console.log(decryptedString); // 输出:"Hello World"
测试
很多简单的加密,都可以通过一键JS解密去解开。我们可以把上边的代码丢进去测试一下看是否可以直接解出来。这个JS一键解密是jsjiami官网的功能。经测试该加密无法一键解开,安全性还是有的。
原理分析
- 字符串定义: 代码一开始定义了字符串
"Hello World"
,我们将对其进行加密和解密操作。 - 加密操作:
- 在加密部分,我们使用了一系列操作符来表示不同的字符:
[] + []
会转换成"undefined"
。![]
会转换成false
,加上[]
后变成`“false”。!![]
会转换成true
,加上[]
后变成`“true”。+[]
会转换成数字0
,加上[]
后变成`“0”。-[]
会转换成数字-0
,加上[]
后变成`“0”。~[]
会转换成数字-1
,加上[]
后变成`“-1”。
- 这些操作符产生的结果被存储在数组中,然后使用
join
函数连接成一个字符串,形成了加密后的字符串"[object Object]undefinedtrue0-0-1"
。
- 在加密部分,我们使用了一系列操作符来表示不同的字符: