RSA加密超长数据 前端js 作为参考
偏前端 + 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 作为参考相关推荐
- Js参数RSA加密传输之jsencrypt.js的使用
这篇文章主要介绍了Js参数RSA加密传输之jsencrypt.js的使用,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 注意几点: 1.参数传递的+号处理,在传输时会把+变成 ...
- RSA加密:Web前端登录账户密码加密传输
一般在做系统时候对安全性要求比较高,现在通常选择https协议来进行数据传输.很多情况下一般的javaweb网站,如果安全要求不是很高的话,用https协议就可以了.在这种情况下,密码的明文传输显然是 ...
- java rsa加密解密_前端实现对请求参数进行RSA加密amp;解密,针对字符串过长进行分段加密amp;分段解密的处理...
前言 在需求开发中,为了安全起见,我们都会难免遇到需要对一些敏感参数进行加密或者解密.所以,今天给大家分享的就是使用jsencrypt对请求参数进行RSA加密与解密,发这篇文章其实主要因为近期我的一位 ...
- Android RSA加密对象数据
前几天说了手头项目用MD5和双向加密DES来进行加密的,因为产品是在不断的改造中完善的.考虑到DES和MD5加解密还是会存下一定的风险,于是产品一拍,不行,听你们说MD5加密是不安全的,咱们产品以后做 ...
- js rsa java解密_RSA使用js加密,使用java解密
RSA算法使用javascript加密,使用java解密,提供完整代码及例子下载. javascript加密介绍参见另一篇:javascript使用RSA加密提交数据.本篇的例子使用的js是上一篇中提 ...
- xiaogui9527 使用X.509数字证书加密解密实务(三)-- 使用RSA证书结合对称加密技术加密长数据
一. 使用证书结合对称加密算法加.解密长数据 上一章节讨论了如何使用RSA证书加密数据,文中提到:"Dotnet的RSA实现有个特点,它必须要在明文中添加一些随机数,所以明文不能把128字 ...
- vue安装jsencrypt_vue使用JSEncrypt实现rsa加密及挂载方法
挂载全局方法 使用jsencrypt进行rsa加密 原文链接:Js参数RSA加密传输,jsencrypt.js的使用 - CSDN博客* https://blog.csdn.net/p31201115 ...
- React Native RSA加密
Jsencrypt框架 NPM Jsencrypt 1). npm安装 npm i jsencrypt 2). 导入 import 'jsencrypt'; 3). 使用Git控制台创建私钥 # 创建 ...
- 前后端交互,密码加密,RSA 实现前端 js 加密,后端 go 解密
RSA 加密算法简介 一种比较常见的非对称加密算法,常用于前后端交互中的密码加密,前端使用公钥加密密码,后端使用私钥进行解密.公钥可对外开放,私钥是存放在服务端,外部正常情况下是拿不到解密私钥的. 以 ...
最新文章
- Dubbo3 Triple 协议简介与选型思考
- Android开发自学笔记(基于Android Studio1.3.1)—1.环境搭建(转)
- live555 源码分析:播放启动
- rocketmq 顺序消费_10 分钟看懂消息队列 RocketMQ
- 《Essential C++》笔记之(static)静态类成员
- android 指定进程名称,android 根据进程名杀死指定、特定进程
- c#: using Microsoft.Office.Interop.Excel 异常
- linux make 无法生成 .o gch,Linux--makefile的使用
- java多线程总结二(转)
- YAF 接口 2016-10-27
- acunetix导出html,关于Acunetix v11 WebUI下不得不说的事情!
- 如何保存html文件中的照片,如何保存网页上的文字和图片?
- python儿童编程-一款儿童编程入门的理想工具——PythonTurtle
- 【中级计量经济学】Lecture 8 虚拟变量回归
- 【总结】ElasticSearch 安装启动报错max file descriptors [32768] for elasticsearch process is too low, increase
- 生存分析及生存曲线_2021-01-30
- 米的换算单位和公式_小学数学单位换算公式大全.doc
- 【React-music项目问题】The AudioContext was not allowed to start. It must be resumed (or created) after a
- C1. Pokémon Army (easy version)(DP)
- 【推荐系统论文精读系列】(二)--Factorization Machines
热门文章
- How to defeat burnout and stay motivated 战胜倦怠 保持活力
- [Activeden] slick full website template with cms and 2 skins 中文版
- ‘数据分析实战’——营销组合分析(甲厨电公司案例)
- python计算存款复利计算器_分享下自己写的计算余额宝上复利的代码,网上的复利计算器无法满足需求...
- python图像分割算法_用python实现随机森林图像分割
- 外行假装内行,我也来谈谈SAP BAPI和BADI
- BUG记录--Iconfont图标在IE8浏览器的兼容问题
- MBT测试实例:做个“机器人”,使其随机、持续的对“web页面”做交互性测试(一)测试目标
- 如何正确修改标题,如何修改标题不会被降权?
- mysql 数据连续不走索引6_MySql组合索引最左侧原则失效