使用javascript编写简单的加密解密

59 阅读1分钟

加密: 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;
    }
12345678910111213141516171819

console.log(enc(“zhangshihai”,“zsh123456”));
解密:
str 加密后的字符串,key 是秘钥与加密key一致

function 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("");
    }
1234567891011121314151617181920212223

原理:加密的计算Unicode 编码,每个字符用秘钥的四个字符代理,解密的时候将获得对应的原数据的Unicode 编码数据,然后还原数据
console.log(dec(“zs23zsh3zss5zs1hzsh2zs15zsh3zsh4zsh3zss5zsh4”,“zsh123456”));
结果: