偏前端 + rsa加解密 + jsencrypt.min.js–(新增超长字符分段加解密)
复制代码

 <html>2     <head>3         <title>JavaScript RSA Encryption</title>4         <meta charset="UTF-8">5         <script src="js/jquery-1.11.3.min.js"></script>6         <script src="js/jsencrypt.min.js"></script>7     </head>8     <body style="text-align: center;">9         <label for="privkey">私钥</label>
10         <br/>
11         <textarea id="privkey" rows="15" cols="65">MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALwlTWcENnk+BE0DGSxML8yVoFffu+NMfzimnOa4Skft7objdBd3tmh/xqkgnh5+TpSLDb84l+TIwYOwAlO//Nae4qbpR7IFjG2A/kkUa1MwpMFW4bMfxTNhZ0/PJsg4KaPnlCS7edgRnKujfx0aFIUtI9pTd6hjW1uWblkUn7x7AgMBAAECgYEAsoOaK1Jd9S+YmRGFgvhOqgiV+Ip6FTJxy2iamnblU9Y3aZjKf7HASuphrfsay8f/+wTs6DBkPlkU80O/EYOp+r46UIKq5KChW2ErUVaMyxO4f8l0PW2RFHFYWq54SbRa73DepPeC3o9LRinEaJ7/rk13EHiS6RAPkFr/ZyTOYdECQQD0BNI4Wg4gJqZHC1QCHOQUaF2cDWh5cadWT9FOXKdgRUrP+2W67BJP/RjNPT++/cyP3pdNc8vMCkF8IGgJ7Pk/AkEAxWIwCK3prAxupNrlUhPNT+nfG05Bs0SYIQHSiwUykXkcUZAcAveNk2g8XlhAQ4fEZG9BQ0+MlA246FV90NlRxQJAJEm7QWoTA7D7tUD4A0BsoqRKl3Re/wBp1CoWhEK/GU/0qi1GmZ+VsZN/5rWfDzYK/7Ioafo4amV0C5N+JUu6XQJANbDuxf2guYcsNbXBeWEfkSRZ5xCTeJMpGplnTx+b0Mxz8o/Tvs7d+QH6oeM5n+T3fCZzRz8FS2SsLq7KqZvjzQJADLfcfxaYd3V7e0/Op08ifDyCjpLa3rviNFss/msOR3Mzfg7J05wD3oVHut+g+RVF7+Gnia07pV5YnFVd0WA1UA==</textarea>
12         <!--<br/>-->
13         <label for="pubkey">公钥</label>
14         <!--<br/>-->
15         <textarea id="pubkey" rows="15" cols="65">MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8JU1nBDZ5PgRNAxksTC/MlaBX37vjTH84ppzmuEpH7e6G43QXd7Zof8apIJ4efk6Uiw2/OJfkyMGDsAJTv/zWnuKm6UeyBYxtgP5JFGtTMKTBVuGzH8UzYWdPzybIOCmj55Qku3nYEZyro38dGhSFLSPaU3eoY1tblm5ZFJ+8ewIDAQAB</textarea>
16         <br/>
17         <label for="input">要加密的字符串:</label>
18         <br/>
19         <textarea id="input" name="input" type="text" rows='4' cols='70'>123456789</textarea>
20         <!--<br/>-->
21         <input id="testme" type="button" value="Test Me!!!" />
22         <br/>
23         <label for="input">加密后的字符串:</label>
24         <br/>
25         <textarea id="jiami" name="jiami" type="text" rows='4' cols='70'></textarea>
26         <br/>
27         <label for="pubkey">解密后的密文</label>
28         <br/>
29         <textarea id="jiemi" name="jiemi" type="text" rows='4' cols='70'></textarea>
30     </body>
31 </html>
复制代码
js部分:复制代码1 <script type="text/javascript">2             $(function() {3                 $('#testme').click(function() {4                     // 加密前的原文5                     console.log('这是原文' + $('#input').val())6                     // 进行RSA加密7                     var encrypt = new JSEncrypt();8                     encrypt.setPublicKey($('#pubkey').val());9                     var encrypted = encrypt.encrypt($('#input').val());
10                     // 加密后的密文
11                     console.log('这是加密之后的' + encrypted);
12                     $('#jiami').val(encrypted);
13
14                     //解密
15                     var decrypt = new JSEncrypt();
16                     decrypt.setPrivateKey($('#privkey').val());
17                     var uncrypted = decrypt.decrypt(encrypted);
18                     console.log('这是解密后的密文' + uncrypted);
19                     $('#jiemi').val(uncrypted);
20                 });
21             });
22         </script>

复制代码
jsencrypt.min.js下载地址:

[github主页 https://github.com/travist/jsencrypt ]

[官方网站 http://travistidwell.com/jsencrypt/ ]

jq库: " <script src="http://code.jquery.com/jquery-1.8.3.min.js"> </script>"

(注!jquery-2.0以上版本不再支持IE 6/7/8) 并不是最新的版本就最好的,而是根据您项目需求所适合的版本!

----新增超长字符分段加解密----
1.首先引入一段转换的js
复制代码

 1 //十六进制转字节2     function hexToBytes(hex) {3         for (var bytes = [], c = 0; c < hex.length; c += 2)4             bytes.push(parseInt(hex.substr(c, 2), 16));5         return bytes;6     }7 8 // 字节转十六进制9     function bytesToHex(bytes) {
10         for (var hex = [], i = 0; i < bytes.length; i++) {
11             hex.push((bytes[i] >>> 4).toString(16));
12             hex.push((bytes[i] & 0xF).toString(16));
13         }
14         return hex.join("");
15     }

复制代码
2.在引入分段加解密js(这里有2种方法供选择,建议使用方法2)

*:如果与JAVA后台数据交互。某些中文字符可能因为编码原因会乱码,可以加密前先进行 encodeURIComponent(s)。然后解密后在decode回来。
//方法一

JSEncrypt.prototype.encryptLong=function (d){var k = this.key;var maxLength = (((k.n.bitLength() + 7) >> 3) - 11);try {var lt = "";var ct = "";if (d.length > maxLength) {lt = d.match(/.{1,117}/g);lt.forEach(function (entry) {var t1 = k.encrypt(entry);ct += t1;});return hexToBytes(ct);}var t = k.encrypt(d);var y = hexToBytes(t);return y;} catch (ex) {return false;}
}JSEncrypt.prototype.decryptLong = function (string) {var k = this.getKey();var maxLength = ((k.n.bitLength() + 7) >> 3);//var maxLength = 128;try {var str = bytesToHex(string);//var b=hex2Bytes(str);var inputLen = str.length;var ct = "";if (str.length > maxLength) {var lt = str.match(/.{1,256}/g);lt.forEach(function (entry) {var t1 = k.decrypt(entry);ct += t1;});return ct;}var y = k.decrypt(bytesToHex(string));return y;} catch (ex) {return false;}
};

//方法2

JSEncrypt.prototype.encryptLong2 = function (string) {var k = this.getKey();try {var lt = "";var ct = "";//RSA每次加密117bytes,需要辅助方法判断字符串截取位置//1.获取字符串截取点var bytes = new Array();bytes.push(0);var byteNo = 0;var len, c;len = string.length;var temp = 0;for (var i = 0; i < len; i++) {c = string.charCodeAt(i);if (c >= 0x010000 && c <= 0x10FFFF) {byteNo += 4;} else if (c >= 0x000800 && c <= 0x00FFFF) {byteNo += 3;} else if (c >= 0x000080 && c <= 0x0007FF) {byteNo += 2;} else {byteNo += 1;}if ((byteNo % 117) >= 114 || (byteNo % 117) == 0) {if (byteNo - temp >= 114) {bytes.push(i);temp = byteNo;}}}//2.截取字符串并分段加密if (bytes.length > 1) {for (var i = 0; i < bytes.length - 1; i++) {var str;if (i == 0) {str = string.substring(0, bytes[i + 1] + 1);} else {str = string.substring(bytes[i] + 1, bytes[i + 1] + 1);}var t1 = k.encrypt(str);ct += t1;};if (bytes[bytes.length - 1] != string.length - 1) {var lastStr = string.substring(bytes[bytes.length - 1] + 1);ct += k.encrypt(lastStr);}return hexToBytes(ct);}var t = k.encrypt(string);var y = hexToBytes(t);return y;} catch (ex) {return false;}
};JSEncrypt.prototype.decryptLong2 = function (string) {var k = this.getKey();// var maxLength = ((k.n.bitLength()+7)>>3);var MAX_DECRYPT_BLOCK = 128;try {var ct = "";var t1;var bufTmp;var hexTmp;var str = bytesToHex(string);var buf = hexToBytes(str);var inputLen = buf.length;//开始长度var offSet = 0;//结束长度var endOffSet = MAX_DECRYPT_BLOCK;//分段加密while (inputLen - offSet > 0) {if (inputLen - offSet > MAX_DECRYPT_BLOCK) {bufTmp = buf.slice(offSet, endOffSet);hexTmp = bytesToHex(bufTmp);t1 = k.decrypt(hexTmp);ct += t1;} else {bufTmp = buf.slice(offSet, inputLen);hexTmp = bytesToHex(bufTmp);t1 = k.decrypt(hexTmp);ct += t1;}offSet += MAX_DECRYPT_BLOCK;endOffSet += MAX_DECRYPT_BLOCK;}return ct;} catch (ex) {return false;}
};

作为参考,希望帮到您

RSA加密超长数据 前端js 作为参考相关推荐

  1. Js参数RSA加密传输之jsencrypt.js的使用

    这篇文章主要介绍了Js参数RSA加密传输之jsencrypt.js的使用,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 注意几点: 1.参数传递的+号处理,在传输时会把+变成 ...

  2. RSA加密:Web前端登录账户密码加密传输

    一般在做系统时候对安全性要求比较高,现在通常选择https协议来进行数据传输.很多情况下一般的javaweb网站,如果安全要求不是很高的话,用https协议就可以了.在这种情况下,密码的明文传输显然是 ...

  3. java rsa加密解密_前端实现对请求参数进行RSA加密amp;解密,针对字符串过长进行分段加密amp;分段解密的处理...

    前言 在需求开发中,为了安全起见,我们都会难免遇到需要对一些敏感参数进行加密或者解密.所以,今天给大家分享的就是使用jsencrypt对请求参数进行RSA加密与解密,发这篇文章其实主要因为近期我的一位 ...

  4. Android RSA加密对象数据

    前几天说了手头项目用MD5和双向加密DES来进行加密的,因为产品是在不断的改造中完善的.考虑到DES和MD5加解密还是会存下一定的风险,于是产品一拍,不行,听你们说MD5加密是不安全的,咱们产品以后做 ...

  5. js rsa java解密_RSA使用js加密,使用java解密

    RSA算法使用javascript加密,使用java解密,提供完整代码及例子下载. javascript加密介绍参见另一篇:javascript使用RSA加密提交数据.本篇的例子使用的js是上一篇中提 ...

  6. xiaogui9527 使用X.509数字证书加密解密实务(三)-- 使用RSA证书结合对称加密技术加密长数据

    一.  使用证书结合对称加密算法加.解密长数据 上一章节讨论了如何使用RSA证书加密数据,文中提到:"Dotnet的RSA实现有个特点,它必须要在明文中添加一些随机数,所以明文不能把128字 ...

  7. vue安装jsencrypt_vue使用JSEncrypt实现rsa加密及挂载方法

    挂载全局方法 使用jsencrypt进行rsa加密 原文链接:Js参数RSA加密传输,jsencrypt.js的使用 - CSDN博客* https://blog.csdn.net/p31201115 ...

  8. React Native RSA加密

    Jsencrypt框架 NPM Jsencrypt 1). npm安装 npm i jsencrypt 2). 导入 import 'jsencrypt'; 3). 使用Git控制台创建私钥 # 创建 ...

  9. 前后端交互,密码加密,RSA 实现前端 js 加密,后端 go 解密

    RSA 加密算法简介 一种比较常见的非对称加密算法,常用于前后端交互中的密码加密,前端使用公钥加密密码,后端使用私钥进行解密.公钥可对外开放,私钥是存放在服务端,外部正常情况下是拿不到解密私钥的. 以 ...

最新文章

  1. Dubbo3 Triple 协议简介与选型思考
  2. Android开发自学笔记(基于Android Studio1.3.1)—1.环境搭建(转)
  3. live555 源码分析:播放启动
  4. rocketmq 顺序消费_10 分钟看懂消息队列 RocketMQ
  5. 《Essential C++》笔记之(static)静态类成员
  6. android 指定进程名称,android 根据进程名杀死指定、特定进程
  7. c#: using Microsoft.Office.Interop.Excel 异常
  8. linux make 无法生成 .o gch,Linux--makefile的使用
  9. java多线程总结二(转)
  10. YAF 接口 2016-10-27
  11. acunetix导出html,关于Acunetix v11 WebUI下不得不说的事情!
  12. 如何保存html文件中的照片,如何保存网页上的文字和图片?
  13. python儿童编程-一款儿童编程入门的理想工具——PythonTurtle
  14. 【中级计量经济学】Lecture 8 虚拟变量回归
  15. 【总结】ElasticSearch 安装启动报错max file descriptors [32768] for elasticsearch process is too low, increase
  16. 生存分析及生存曲线_2021-01-30
  17. 米的换算单位和公式_小学数学单位换算公式大全.doc
  18. 【React-music项目问题】The AudioContext was not allowed to start. It must be resumed (or created) after a
  19. C1. Pokémon Army (easy version)(DP)
  20. 【推荐系统论文精读系列】(二)--Factorization Machines

热门文章

  1. How to defeat burnout and stay motivated 战胜倦怠 保持活力
  2. [Activeden] slick full website template with cms and 2 skins 中文版
  3. ‘数据分析实战’——营销组合分析(甲厨电公司案例)
  4. python计算存款复利计算器_分享下自己写的计算余额宝上复利的代码,网上的复利计算器无法满足需求...
  5. python图像分割算法_用python实现随机森林图像分割
  6. 外行假装内行,我也来谈谈SAP BAPI和BADI
  7. BUG记录--Iconfont图标在IE8浏览器的兼容问题
  8. MBT测试实例:做个“机器人”,使其随机、持续的对“web页面”做交互性测试(一)测试目标
  9. 如何正确修改标题,如何修改标题不会被降权?
  10. mysql 数据连续不走索引6_MySql组合索引最左侧原则失效