原文链接:http://c.biancheng.net/view/5610.html
字符串加密和解密的关键是算法设计,字符串经过复杂的编码处理,返回一组看似杂乱无章的字符串。对于常人来说,输入的字符串是可以阅读的信息,但是被函数打乱或编码之后显示的字符串就会变成无意义的信息。想要把这些垃圾信息变成可用信息,还需要使用相反的算法把它们逆转回来。
如果把字符串中的“中”字进行自定义加密。可以考虑利用 charCodeAt() 方法获取该字符的 Unicode 编码。var s = “中”;var b = s.charCodeAt(0); //返回值20013
然后以 36 为倍数不断取余数。b1 = b % 36; //返回值33,求余数b = (b - b1) / 36; //返回值555,求倍数b2 = b % 36; //返回值15,求余数b = (b - b2) / 36; //返回值15,求倍数b3 = b % 36; //返回值15,求余数
那么不断求得的余数,可以通过下面公式反算出原编码值。var m = b3 36 36 + b2 * 36 + b1; //返回值20013,反求字符“中”的编码值
有了这种算法,就可以实现字符与加密数值之间的相互转换。
定义一串密钥:var key = “0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”;
把余数定位到与密钥中某个下标值相等的字符上,这样就实现了加密效果。反过来,如果知道某个字符在密钥中的下标值,然后反算出被加密字符的 Unicode 编码值,最后就可以逆推出被加密字符的原信息。
本例设定密钥是以 36 个不同的数值和字母组成的字符串。不同的密钥,加密解密的结果是不同的,加密结果以密钥中的字符作为基本元素。
加密字符串:var toCode = function (str) { //加密字符串 //定义密钥,36个字母和数字 var key = “0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”; var 1 = key.length; //获取密钥的长度 var a = key.split(“”); //把密钥字符串转换为字符数组 var s = “”,b, b1, b2, b3; //定义临时变量 for (var i = 0; i
应用代码
纯文本复制
var s = “JavaScript 中国”; //字符串直接量
s = toCode(s); //加密字符串
console.log(s);
//返回“02Y02P03A02 P03702R03602X034038FFXH6L”
s = fromCode(s); //解密被加密的字符串
console.log(s); //返回字符串“JavaScript 中国”