JavaScript生成可解密的随机密文字符串

本文介绍了一种生成动态密文的方法,通过将字符串转换为八进制Unicode码,反序,随机插入小写字母,并替换分割符为随机大写字母来加密。解密过程则逆向操作,去除小写字母,统一分割符,反序并转换回原始文本。
特点:

每次生成的密文都不一样,解密后的文本一致

加密:

将字符串中的字符拆分成数组并将每个字符元素转为他的八进制Unicode码->反序->分割字符串->在字符串中随机加入小写字母->将分割符替换为随机大写字母

这样最终生成了 由数字/小写字母/大写字母 构成的随机密文

解密:

去掉小写字母->将大写字母替换成一个统一分割符并用分割符拆分字符串为数组->反序->将八进制Unicode码转字符串->将数组合并成字符串

生成动态密文的函数:
function encodeStr(str) {
    if (!str) return;

    var random = function (lower, upper) {
        return Math.floor(Math.random() * (upper - lower + 1)) + lower;
    };

    var arr = str.toString().split("").map(function (item) {
        return item.charCodeAt(0).toString(8)
    });

    arr.reverse();//反序数组
    arr = arr.join("_").split("");//暂时使用 _ 分割字符串;
    var num = 0;
    while (num < str.length) {
        var r = String.fromCharCode(random(97, 122));//生成用于混淆的  的 小写字母
        arr.splice(random(0, arr.length), 0, r);
        num++;
    }
    return arr.join("").replace(/_/ig, function (str) {
        return String.fromCharCode(random(65, 90));
    });//将分割符 _ 替换为随机的 大写字母

}
解析动态密文的函数:
function decodeStr(str) {
    if (!str) return;
    var temp = [];
    str.split("").forEach(function (item) {
        var code = item.charCodeAt(0);
        if (code <= 90 && code >= 65) {
            item = "_";//将作为分割用的 随机大写字母 统一为 _  以便切割
            temp.push(item);
        }else if (code <= 57 && code >= 48) {
            temp.push(item);//提取 数字
        }
    });
    temp = temp.join("").split("_");
    temp.reverse();
    var res = temp.map(function (item) {
        return String.fromCharCode(parseInt(item, 8));
    });

    return res.join("");

}

转载于https://www.crazyming.com/note/1704/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值