字符串加密和解密的关键是算法设计,字符串经过复杂的编码处理,返回一组看似杂乱无章的字符串。对于常人来说,输入的字符串是可以阅读的信息,但是被函数打乱或编码之后显示的字符串就会变成无意义的信息。想要把这些垃圾信息变成可用信息,还需要使用相反的算法把它们逆转回来。

如果把字符串中的“中”字进行自定义加密。可以考虑利用 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

b = str.charCodeAt(i); //逐个提取每个字符,并获取Unicode编码值

b1 = b % 1; //求Unicode编码值得余数

b = (b - b1) / 1; //求最大倍数

b2 = b % 1; //求最大倍数的于是

b = (b - b2) / 1; //求最大倍数

b3 = b % 1; //求最大倍数的余数

s += a[b3] + a[b2] + a[b1]; //根据余数值映射到密钥中对应下标位置的字符

}

return s; //返回这些映射的字符

}

解密字符串:

var fromCode = function (str) {

//定义密钥,36个字母和数字

var key = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

var 1 = key.length; //获取密钥的长度

var b, b1, b2, b3, d = 0, s; //定义临时变量

s = new Array(Math.floor(str.length / 3)); //计算加密字符串包含的字符数,并定义数组

b = s.length; //获取数组的长度

for (var i = 0; i < b; i ++) { //以数组的长度循环次数,遍历加密字符串

b1 = key.indexOf(str.charAt(d)); //截取周期内第一个字符串,计算在密钥中的下标值

d ++;

b2 = key.indexOf(str.charAt(d)); //截取周期内第二个字符串,计算在密钥中的下标值

d ++;

b3 = key.indexOf(str.charAt(d)); //截取周期内第三个字符串,计算在密钥中的下标值

d ++;

s[i] = b1 * 1 * 1 + b2 * 1 + b3 //利用下标值,反推被加密字符的Unicode编码值

}

b = eval("String.fromCharCode(" + s.join(',') + ")");用fromCharCode()算出字符串

return b ; //返回被解密的字符串

}

应用代码

var s = "JavaScript 中国"; //字符串直接量

s = toCode(s); //加密字符串

console.log(s);

//返回“02Y02P03A02 P03702R03602X034038FFXH6L”

s = fromCode(s); //解密被加密的字符串

console.log(s); //返回字符串“JavaScript 中国”

java js 加密解密算法_JS自己实现字符串加密和解密算法相关推荐

  1. php xxtea加密,php - esp32和php XXTEA字符串加密 - SO中文参考 - www.soinside.com

    输入具有不同的数据类型可能会导致此问题,因为当前没有任何类型或范围检查的XXTEA实现. 或者它可能是由于所涉及的两台计算机的不同端序行为,因为二进制文件通常存储为由字节构造的字数组. 或者可能是由于 ...

  2. 使用加密工具类进行有效的字符串加密——CSDN博客

    加密,分为多种,使用场景也是很多的,最多常用的加密方式就是MD5加密,另一种方式就是Base64加密,我这只说说Base64加密,我们使用的工具类:常用的字符串加密解密工具类 下面我上一下代码: pa ...

  3. java js 二级联动下拉列表_JS实现下拉列表的二级联动

    这个是简单也是最基本的下拉框联动的示例,这个示例主要针对那些只有二级联动,且第一级是固定的选项,第二级的内容也比较简单,不刷新的联动,动态的联动需要检索数据库,这个对不需要更新的二级联动比较实用.这里 ...

  4. openssl md5算法 —— Linux下(字符串加密、文件加密)

    理解openssl md5: OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法.常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用. OpenSSL被曝出现 ...

  5. python字符串解密代码_几种字符串加密解密的方法

    第一种:[ Python 与 Bash Shell 的结合 ] 这个命令会让你输入一个字符串,然后会再输出一串加密了的数字. 加密代码[照直输入]: python -c 'print reduce(l ...

  6. php 加密保存mysql_PHP及MYSQL中字符串加密函数

    [IT168 服务器学院]我们在写PHP程序时经常要对用户的口令加密以确保安全,这时就要用到一些加密的函数.我总结了以下几种方法写出来供大家参考. 1.用MYSQL中的加密函数来加密:PASSWORD ...

  7. sunday算法c语言实现,字符串搜索的Sunday算法

    比起流行的kmp算法,  Sunday不仅搜索效率上要高很多, 而且原理还特别简单易理解,  也容易实现. 字符串匹配--Sunday算法 基本思想及举例 Sunday算法由Daniel M.Sund ...

  8. Base64 混淆加密+迭代次数,Base64前后端加解密不一致、Base64 js加解密结果与java加解密结果不一致,Base64中文加密乱码

    Table of Contents 概述 一.js加密,java解密 1.js加密 1.中文字符串加密 2.英文等字符串加密 3.中文字符串混淆.迭代加密 4.英文等字符串混淆.迭代加密 5.JSON ...

  9. csharp base64加密java解密_C#自定义基于Base64的加密解密类

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. using System; using System.Security.Cryptogra ...

  10. diff算法阮一峰_【重学数据结构与算法(JS)】字符串匹配算法(三)——BM算法

    前言 文章的一开头,还是要强调下字符串匹配的思路 将模式串和主串进行比较 从前往后比较 从后往前比较 2. 匹配时,比较主串和模式串的下一个位置 3. 失配时, 在模式串中寻找一个合适的位置 如果找到 ...

最新文章

  1. 惊艳了!升级版的 APDrawing,秒让人脸照变线条肖像画
  2. 一道终身受用的测试题
  3. delphi memo 查找字符 下行插入_Vim高手,从来不用鼠标2——替换、撤销、缩进、查找
  4. 【HDU 1735】字数统计(贪心,有缺陷的一道题)
  5. Nginx + pserve + supervisord — The Pyramid Cookbook v0.2
  6. 谁今天收到鸿蒙系统推送,鸿蒙系统正式推送,只有部分高端机才能收到
  7. 2019年创业融资去哪个平台好?创成汇
  8. 51信用卡微服务集成测试自动化探索
  9. Java类加载文章2(z)
  10. 大一c语言试题及答案解析,大一c语言期末题及参考答案.doc
  11. C++多线程03 Lambda表达式与caII once
  12. 快速排名系统询火星推荐_seo排名工具推荐10火星:比较好用的SEO长尾关键词
  13. alex机器人 ser_基于Web Service的机器人远程控制系统设计
  14. C语言:L1-078 吉老师的回归 (15 分)
  15. C#基于虹软SDK人脸识别签到系统
  16. docker的介绍、安装、镜像命令
  17. 以太坊智能合约项目开发——Web3.py库安装及错误解决方案
  18. Windows10企业版中安装Docker
  19. 如何让mysql数据库允许被远程连接访问
  20. 【PostgreSQL】客户端请求处理 PostgresMain()

热门文章

  1. java web工程师百度云教程_JavaWeb工程师全套视频教程 (初级+中级+高级) 一共485集 送面试辅导...
  2. Vue.js(九) 第三方常用插件
  3. HEVC代码学习31:xCheckRDCostMerge2Nx2N函数
  4. StackDocklet 完美攻略
  5. 挖矿病毒zz.sh——记一次linux(centos)成为矿机后的排查与修复过程
  6. 数学建模中的整数规划总结及姜启源第4章(1-3)的解析
  7. python编程机械_机器人Python编程与开发
  8. qt银行排队系统服务器代码,QT银行叫号排队系统
  9. Web入门之VScode连接数据库sql server(超详细)
  10. 华为荣耀手机root解锁BL+刷机教程