JS自己实现字符串加密和解密算法
2023-09-14 08:56:55 时间
字符串加密和解密的关键是算法设计,字符串经过复杂的编码处理,返回一组看似杂乱无章的字符串。对于常人来说,输入的字符串是可以阅读的信息,但是被函数打乱或编码之后显示的字符串就会变成无意义的信息。想要把这些垃圾信息变成可用信息,还需要使用相反的算法把它们逆转回来。
如果把字符串中的“中”字进行自定义加密。可以考虑利用 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 个不同的数值和字母组成的字符串。不同的密钥,加密解密的结果是不同的,加密结果以密钥中的字符作为基本元素。
<script> var toCode = function (str,key) { //加密字符串 //定义密钥,36个字母和数字 var l = key.length; //获取密钥的长度 var a = key.split(""); //把密钥字符串转换为字符数组 var s = "",b, bl, b2, b3; //定义临时变量 for (var i = 0; i <str.length; i ++) { //遍历字符串 b = str.charCodeAt(i); //逐个提取每个字符,并获取Unicode编码值 bl = b % l; //求Unicode编码值得余数 b = (b - bl) / l; //求最大倍数 b2 = b % l; //求最大倍数的于是 b = (b - b2) / l; //求最大倍数 b3 = b % l; //求最大倍数的余数 s += a[b3] + a[b2] + a[bl]; //根据余数值映射到密钥中对应下标位置的字符 } return s; //返回这些映射的字符 } var fromCode = function (str,key) { //定义密钥,36个字母和数字 var l = key.length; //获取密钥的长度 var b, bl, b2, b3, d = 0, s; //定义临时变量 s = new Array(Math.floor(str.length / 3)); //计算加密字符串包含的字符数,并定义数组 b = s.length; //获取数组的长度 for (var i = 0; i < b; i ++) { //以数组的长度循环次数,遍历加密字符串 bl = key.indexOf(str.charAt(d)); //截取周期内第一个字符串,计算在密钥中的下标值 d ++; b2 = key.indexOf(str.charAt(d)); //截取周期内第二个字符串,计算在密钥中的下标值 d ++; b3 = key.indexOf(str.charAt(d)); //截取周期内第三个字符串,计算在密钥中的下标值 d ++; s[i] = bl * l * l + b2 * l + b3 //利用下标值,反推被加密字符的Unicode编码值 } b = eval("String.fromCharCode(" + s.join(',') + ")");//用fromCharCode()算出字符串 return b ; //返回被解密的字符串 } var key = "0l23456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var s = "JavaScript 中国"; //字符串直接量 s = toCode(s,key); //加密字符串 console.log(s); //返回“02Y02P03A02 P03702R03602X034038FFXH6L” s = fromCode(s,key); //解密被加密的字符串 console.log(s); //返回字符串“JavaScript 中国” var key = "0l23456789ABCDEFGHIJKLMNOPQRSTUVWXYZZZZ"; var s = "加密字符串"; //字符串直接量 s = toCode(s,key); //加密字符串 console.log(s); s = fromCode(s,key); //解密被加密的字符串 console.log(s); //返回字符串“JavaScript 中国” </script>
相关文章
- 【NLP基础】英文关键词抽取RAKE算法
- 前端常见算法(js)「建议收藏」
- Vue.js的设计思路
- 基于js原生算法+cocos游戏引擎+uni框架Cloud托管网页:开发2048小游戏域名发布版本
- Js排序算法_js 排序算法
- 简单理解JS中的this关键字 - wuuconix's blog
- 【算法】js求一个数组的幂集
- 使用JS连接MySQL数据库:实现化繁为简(js连接mysql数据库)
- 使用JS控制Oracle数据库的更新(js控制oracle更新)
- JavaScript探索之旅掌握Oracle和JS的完美融合(js与oracle)
- Oracle中使用JS变量管理数据(oracle使用js变量)
- JS类库Bindows1.3中的内存释放方式分析
- js取得2008奥运金牌排名
- javascript学习(一)构建自己的JS库
- 百度地图api应用标注地理位置信息(js版)
- 一个JS的日期格式化算法示例
- JS限制Textarea文本域字符个数的具体实现
- JS预览图像将本地图片显示到浏览器上
- JS文本获得焦点清除文本文字的示例代码
- javascript图片相似度算法实现js实现直方图和向量算法
- js获取某元素的class里面的css属性值代码
- js获得当前时区夏令时发生和终止的时间代码