JS加密字符串

加密思路

  • 通过charCodeAt获取到每一个字符串对应的Unicode码点,
  • 让其码点加上一些常量;再通过fromCharCode获取到该码点对应的字符串;
  • 把字符串相加,通过escape方法进行编码。

API介绍

String.fromCharCode()

String对象提供的静态方法(即定义在对象本身,而不是定义在对象实例的方法),主要是String.fromCharCode()。该方法的参数是一个或多个数值,代表 Unicode 码点,返回值是这些码点组成的字符串。

String.fromCharCode(60)  //"<"
String.charCodeAt()

返回字符串指定位置的Unicode码点(十进制),相当于
String.fromCharCode()的逆操作。

  • 参数为空,返回首字符对应的Unicode码点,如果参数为负或者大于等于字符串长度,返回NaN
  • charCodeAt方法返回的 Unicode 码点不会大于65536(0xFFFF),也就是说,只返回两个字节的字符的码点。如果遇到码点大于 65536 的字符(四个字节的字符),必需连续使用两次charCodeAt,不仅读入charCodeAt(i),还要读入charCodeAt(i+1),将两个值放在一起,才能得到准确的字符。
'123'.charCodeAt(0)  //49
escape()

编码对字符串进行编码。URL编码方式。

escape(">")  //"%3E"

思考:

  1. 第一个字符的处理是获取到码点后,与字符串长度、时间戳前六位相加(时间短时间内不会变,长时间内是会变);
  2. 之后字符串的处理 是获取到对应的码点,与前一个字符码点相加。

解密思路

  • 通过unescape进行URL解码,
  • 通过charCodeAt获取到第一个字符的码点,然后减去字符长度、时间戳, 然后把码点通过fromCharCode转成原始字符;
  • 之后字符串的解密是把当前码点减去原始字符串前一位的码点。然后通过fromCharCode转成原始字符串。

       const key = new Date().valueOf().toString()
        function lock(o) {
            var d = String.fromCharCode(o.charCodeAt(0) + o.length + parseInt(key.slice(0, 5)));
            for (var k = 1; k < o.length; k++) {
                d += String.fromCharCode(o.charCodeAt(k) + o.charCodeAt(k - 1));
            }
            console.log(escape(d), 'answer');
        }
        lock("

参考文章:
http://javascript.ruanyifeng.com/stdlib/string.html
https://www.w3schools.com/jsref/jsref_escape.asp

你可能感兴趣的:(JS加密字符串)