JavaScript自定义实现字符串加密和解密

Posted 尔嵘

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript自定义实现字符串加密和解密相关的知识,希望对你有一定的参考价值。

加密算法:

/**
 * 字符串自定义加密规则
 */
export function toCode(str) {  //加密字符串
    //定义密钥,36个字母和数字
    var key = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var l = key.length;  //获取密钥的长度
    var a = key.split("");  //把密钥字符串转换为字符数组
    var s = "", b, b1, b2, b3;  //定义临时变量
    for (var i = 0; i < str.length; i++) {  //遍历字符串
        b = str.charCodeAt(i);  //逐个提取每个字符,并获取Unicode编码值
        b1 = b % l;  //求Unicode编码值得余数
        b = (b - b1) / l;  //求最大倍数
        b2 = b % l;  //求最大倍数的于是
        b = (b - b2) / l;  //求最大倍数
        b3 = b % l;  //求最大倍数的余数
        s += a[b3] + a[b2] + a[b1];  //根据余数值映射到密钥中对应下标位置的字符
    }
    return s;  //返回这些映射的字符
}

解密算法:

/**
 * 字符串自定义解密规则
 */
export function fromCode(str) {
    //定义密钥,36个字母和数字
    var key = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var l = key.length;  //获取密钥的长度
    var b, b1, b2, b3, d = 0, s;  //定义临时变量
    s = new Array(Math.floor(str.length / 3));  //计算加密字符串包含的字符数,并定义数组
    b = s.length;  //获取数组的长度
    for (var i = 0; i < b; i++) {  //以数组的长度循环次数,遍历加密字符串
        b1 = key.indexOf(str.charAt(d));  //截取周期内第一个字符串,计算在密钥中的下标值
        d++;
        b2 = key.indexOf(str.charAt(d));  //截取周期内第二个字符串,计算在密钥中的下标值
        d++;
        b3 = key.indexOf(str.charAt(d));  //截取周期内第三个字符串,计算在密钥中的下标值
        d++;
        s[i] = b1 * l * l + b2 * l + b3  //利用下标值,反推被加密字符的Unicode编码值
    }
    b = eval("String.fromCharCode(" + s.join(',') + ")");
    return b;  //返回被解密的字符串
}

应用实例:

(1)加密字符串

var str = "xuyoubo";

var str1 = toCode(str);

console.log(str1);

(2)解密字符串

var ver = "03C03903D03303902Q033";

var str2 = fromCode(ver);

console.log(str2);

 

 

 

以上是关于JavaScript自定义实现字符串加密和解密的主要内容,如果未能解决你的问题,请参考以下文章

js中加密解密时中文符号乱码

js中加密解密时中文符号乱码

几种好用的PHP自定义可逆加密函数

自定义注解实现解密+单个属性解密

SpringBoot Starter自定义注解 - 接口加解密

C#如何解密用javascript中encodeURIComponent函数加密过的数据