JavaScript 自写加密解密函数

82 篇文章 7 订阅

JavaScript 自写加密解密函数

版权声明:本文为CSDN博主「zshsats」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zshsats/article/details/82772597

加密函数:

/**
* 加密算法
* str:要加密的字符串
* key:指定加密的字符
*/
function enc(str,key) {
    var length = key.length;
    var keyList = key.split("");
    var s="",bit,bit1,bit2,bit3,bit4;
    for(var i = 0;i<str.length;i++){
        bit = str.charCodeAt(i); //获得字符的Unicode 编码(数字)
        bit1=bit%length; 
        bit=(bit-bit1)/length;
        bit2=bit%length;
        bit=(bit-bit2)/length;
        bit3=bit%length;
        bit=(bit-bit3)/length;
        bit4=bit%length;
        //bit1,bit2,bit3,bit4 key秘钥的位置
        //keyList[bit4]+keyList[bit3]+keyList[bit2]+keyList[bit1] 将str中的每一个字符对应秘钥的四个字符
        s+=keyList[bit4]+keyList[bit3]+keyList[bit2]+keyList[bit1];
    }
    return s;
}

解析:不要把参数strkey搞混,二者不一样,例如:

// buhehaizhiyan:这是要加密的字符串【即参数str】

// !@#$%&* : 这是指定的加密字符【即参数key】

enc('buhehaizhiyan','!@#$%&*');

如果还不理解,一会看一下具体效果就会明了;

解密函数:

/**
* 解密算法
* str:加密过后的字符串
* key:指定解密的字符串[应和加密字符串指定的加密字符一致]
*/
dec(str,key) {
    var length = key.length;
    var bit,bit1,bit2,bit3,bit4,j=0,s;
    var s = new Array(Math.floor(str.length/4));
    var result =[];
    bit = s.length;
    for(var i=0;i<bit;i++){
        bit1 = key.indexOf(str.charAt(j));
        j++;
        bit2 = key.indexOf(str.charAt(j));
        j++;
        bit3 = key.indexOf(str.charAt(j));
        j++;
        bit4 = key.indexOf(str.charAt(j));
        j++;
        //bit1,bit2,bit3,bit4 每四个秘钥字符的位置 对应的是str的一个字符         
        s[i]=bit1*length*length*length+bit2*length*length+bit3*length+bit4;
        //bit1*length*length*length+bit2*length*length+bit3*length+bit4还原str每个字符的Unicode 编码
        result.push(String.fromCharCode(s[i])); //将Unicode 编码还原数据
    }
    //还原字符
    return result.join("");
}

解析:strkey参数在解密函数里代表的意义就不同了,看例子:

// !@#$%^&**&^^%$#@@#$$%%^ : 指的是你加密过后的字符串 [即str]

// !@#$%^&*: 指定解密的字符串 [即key][应和加密字符串指定的加密字符一致,不然解密出来的会和原来的不同]

dec('!@#$%^&**&^^%$#@@#$$%%^','!@#$%^&*');

示例:

  • 我们对 字符串:this is a string进行加密解密操作。
  • 指定加密解密字符串:!@#$%^&*
加密:
var result = enc('this is a string','!@#$%^&*');
console.log(result);

输出结果:

!@&%!@^!!@^@!@&$!!%!!@^@!@&$!!%!!@%@!!%!!@&$!@&%!@&#!@^@!@^&!@%*
  • 输出的结果,全部都用我们指定的那几个加密字符,用了一些规则进行了加密。
解密
var result = dec('!@&%!@^!!@^@!@&$!!%!!@^@!@&$!!%!!@%@!!%!!@&$!@&%!@&#!@^@!@^&!@%*','!@#$%^&*');
console.log(result);

输出结果:

this is a string
  • 把加密过后的字符串,用我们指定的解密字符串,进行解密,就生成了我们原来的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值