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;
}

解析:不要把参数strkey搞混,二者不一样,例如:

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

解析:strkey参数在解密函数里代表的意义就不同了,看例子:

// !@#$%^&**&^^%$#@@#$$%%^ : 指的是你加密过后的字符串 [即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
  • 把加密过后的字符串,用我们指定的解密字符串,进行解密,就生成了我们原来的结果。

JavaScript 自写加密解密函数相关推荐

  1. php中的base64,php中base64_decode与base64_encode加密解密函数

    php中base64_decode与base64_encode加密解密函数,实例分析了base64加密解密函数的具体用法,具有一定的实用价值,需要的朋友可以参考下 本文实例讲述了php中base64_ ...

  2. php动态密码和加密解密函数的使用(动态密码、Discuz核心函数AuthCode、任意输入密码验证)

    php加密解密的使用 一.项目说明 二.项目分析 1.js外部文件 2.HTML容器构建 3.layui前端验证 4.php后端验证 封装函数 密码验证规则 strpos内置函数 三.经典的核心加密函 ...

  3. 各种加密解密函数(URL加密解密、sha1加密解密、des加密解密)

    普通hash函数如md5.sha1.base64等都是不可逆函数.虽然我们利用php可以利用这些函数写出可逆函数来.但是跨语言时这类可逆函数非常难搞定.所以这时尽量使用AES DES RC4 Rabb ...

  4. 【C 语言】文件操作 ( 文件加密解密 | 使用第三方 DES 加密解密库 | 头文件导入 | 兼容 C++ 语言 | 加密解密函数说明 )

    文章目录 一.导入第三方库头文件 二.头文件说明 1.兼容 C++ 语言 2.头文件导入限制 3.加密解密函数说明 一.导入第三方库头文件 对文件进行加密 , 将文件中的数据分成若干块 , 一块一块的 ...

  5. 加密解密php,2个比较经典的PHP加密解密函数分享

    项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理. 最常见的应用在用户登录以及一些AP ...

  6. php可逆加密解密函数,php 好用可逆的 加密解密 函数。

    php 好用可逆的加密解密函数. function encode($content, $key = 'pass' ) { // 加密数据的函数 , 主要进行移位操作 $key = md5($key); ...

  7. 字符串加密解密函数 (C#) (转)

    字符串加密解密函数 (C#) (转) 字符串加密解密函数 (C#) using System; using System.Text; using System.Security.Cryptograph ...

  8. 自己实现的php加密解密函数结果纯字母和数字

    php自带的base64加密解密函数大部分人都知道,加密后很容易被解密,所以就自己实现的php加密解密函数,密文是字母和数字组合. <?php /* *加密 */ function encode ...

  9. 介绍几个PHP 自带的加密解密函数

    PHP 自带的加密解密函数 目前经常使用的加密函数有:md5(), sha1(), crypt(), base64_encode(), urlencode() . 其中 md5(), sha1(), ...

最新文章

  1. @ConditionalOnProperty 详解
  2. analyzing problems
  3. 错误 SQL TOP子句中的行数必须是整数
  4. 洛谷 P2486 [SDOI2011]染色 LCT
  5. ubuntu中文文件名乱码
  6. html输出text,为什么text();和html();输出结果不一样呢?
  7. springioc注解版运行效果演示
  8. vs entityframwork Validation failed for one or more entities
  9. Hadoop框架:DataNode工作机制详解
  10. C罗捧得史上首个区块链得分王奖杯 1600名支付宝用户获“同款”
  11. 微信宣布将推出自有输入法后,搜狗快马加鞭赶来泼冷水......
  12. efficientnet-yolo3-tf2的实现
  13. [转载] Python从字符串中删除字符
  14. 根据ip和子网掩码技术可用网段的在线工具
  15. Spring mvc + mybatis+maven集成swagger ui自动生成api文档
  16. python从某行开始读_python 读取行
  17. ValueError: Cannot have number of splits n_splits=10 greater than the number of samples: 0
  18. SIM相关术语MCC MNC UIM SIM PIN PUK简介
  19. RestTemplateConfig
  20. IDEA解决开两个窗口问题

热门文章

  1. QT中改变坐标系方向和原点
  2. Domain's DNS record could not be retrieved问题解决
  3. 怎样写工作报告和汇报材料?
  4. 30岁前,这四件事你一定要去做
  5. luogu p2705 小球
  6. logback.xml中additivity的使用
  7. 使用mysqladmin管理配置mairadb
  8. mysql_config缺失_如何解决mysqlconfig缺失问题
  9. 洛谷P2619 [国家集训队2]Tree I(带权二分,Kruscal,归并排序)
  10. 走遍美国MP4 第 01 - 78集迅雷下载地址: