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;
}
解析:不要把参数str
和key
搞混,二者不一样,例如:
// 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("");
}
解析:str
和key
参数在解密函数里代表的意义就不同了,看例子:
// !@#$%^&**&^^%$#@@#$$%%^ : 指的是你加密过后的字符串 [即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
- 把加密过后的字符串,用我们指定的解密字符串,进行解密,就生成了我们原来的结果。