美文网首页
JS加密字符串

JS加密字符串

作者: HelloAndyZhang | 来源:发表于2018-08-04 10:15 被阅读0次

加密思路

  • 通过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("<hg'rvn']v�{ahmF")


        const URI = "%u3C2F%A4%CF%8E%99%E8%E4%95%84%D3%8F%94%DC%C9%D5%B3" 
        //           %u3C30%A4%CF%8E%99%E8%E4%95%84%D3%8F%94%DC%C9%D5%B3
       

        function unLock(o) {
            let S = unescape(o);
            let d = String.fromCharCode(S.charCodeAt(0) - S.length + 1 - parseInt(key.slice(0, 5)));
            for (let i = 1; i < S.length; i++) {
                d += String.fromCharCode(S.charCodeAt(i) - d.charCodeAt(i - 1));
            }
            console.log(d);
        }

        unLock(URI)



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

相关文章

网友评论

      本文标题:JS加密字符串

      本文链接:https://www.haomeiwen.com/subject/cpwpvftx.html