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

分享2种,分段 和 不分段 加解密 --话不多说,直接上代码!~
最终效果:

首先引入2个js

<script src="js/jquery-1.11.3.min.js"></script>
<script src="js/jsencrypt.min.js"></script>

html部分:

<label for="privkey">私钥</label><br/><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><br/><label for="pubkey">公钥</label><br/><textarea id="pubkey" rows="15" cols="65">MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8JU1nBDZ5PgRNAxksTC/MlaBX37vjTH84ppzmuEpH7e6G43QXd7Zof8apIJ4efk6Uiw2/OJfkyMGDsAJTv/zWnuKm6UeyBYxtgP5JFGtTMKTBVuGzH8UzYWdPzybIOCmj55Qku3nYEZyro38dGhSFLSPaU3eoY1tblm5ZFJ+8ewIDAQAB</textarea><br/><label for="input">要加密的字符串:</label><br/><textarea id="input" name="input" type="text" rows='4' cols='70'>123456789</textarea><br/><input id="testme" type="button" value="Test Me!!!" /><br/><label for="jiami">加密后的密文:</label><br/><textarea id="jiami" name="jiami" type="text" rows='4' cols='70'></textarea><br/><label for="pubkey">解密后的密文</label><br/><textarea id="jiemi" name="jiemi" type="text" rows='4' cols='70'></textarea>

js部分:

$(function() {$('#testme').click(function() {// 进行RSA加密var encrypt = new JSEncrypt();//获取公钥encrypt.setPublicKey($('#pubkey').val());//公钥加密var encrypted = encrypt.encryptLong2($('#input').val());// 加密后的密文$('#jiami').val(encrypted);//解密var decrypt = new JSEncrypt();//获取私钥decrypt.setPrivateKey($('#privkey').val());//解药var uncrypted = decrypt.decryptLong2(encrypted);$('#jiemi').val(uncrypted);});});

jsencrypt.min.js下载地址:github主页 官方网站

jq库:http://code.jquery.com/jquery-1.8.3.min.js
(注!jquery-2.0以上版本不再支持IE 6/7/8) 并不是最新的版本就最好的,而是根据您项目需求所适合的版本!

↑↑↑↑以上是不分段的↑↑↑↑

下面在贴个超长字符串分段处理:
1.首先引入一段转换的js

  //十六进制转字节function hexToBytes(hex) {for (var bytes = [], c = 0; c < hex.length; c += 2)bytes.push(parseInt(hex.substr(c, 2), 16));return bytes;}// 字节转十六进制function bytesToHex(bytes) {for (var hex = [], i = 0; i < bytes.length; i++) {hex.push((bytes[i] >>> 4).toString(16));hex.push((bytes[i] & 0xF).toString(16));}return hex.join("");}

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

3.再配上前面的html 和 js调用部分,就可以加解密任意长度的字符串啦,这里就不重复写了。

希望大家能够用的上哈,其实这个不推荐分段的,太长的话比较慢!!!一般就是用文章顶部的就足够了,做下登录密码的加解密就行了.

#不想粘贴的童鞋到这里下载一个demo看看吧:下载地址

rsa加解密 --- jsencrypt.min.js --- 支持长字符串分段加解密相关推荐

  1. 偏前端 + rsa加解密 + jsencrypt.min.js--(新增超长字符分段加解密)

    html部分 <html><head><title>JavaScript RSA Encryption</title><meta charset= ...

  2. 前端利用jsencrypt.min.js进行RSA加密(常用在登录密码加密)全局方法封装

    步骤: 项目中下载 npm install jsencrypt untils文件下新建js文件,封装公共方法 import JSEncrypt from 'jsencrypt/bin/jsencryp ...

  3. asp版 vbscript RSA公钥加密 / 私钥解密 / 私钥签名 / 公钥验签(支持中文)分段加密解密

    最近有空在把自己的asp站点后端函数全部整理了下,在弄RSA的时候遇到了坑了,然后找到下面这位兄弟刚好发布的文章: https://blog.csdn.net/todaygods/article/de ...

  4. wow.min.js 支持css3多种动画的效果!

    下载地址:http://www.bootcdn.cn/wow/ 今天发现一个非常有趣的js,wow.min.js,Wow.js 允许用户滚动页面的时候展示 CSS 动画.默认的,用户可以使用它来出发 ...

  5. thymeleaf加载不了js引用_网站首页加载慢解决方案

    打开网页,用户最满意的时间是2-5秒,如果用户等待超过10秒,99%的用户会关闭这个网页.那么,是什么原因会导致网站打开慢?又有什么办法解决呢?一般来说,http请求过多.网页过大.服务器性能过差等等 ...

  6. RSA加密超长数据 前端js 作为参考

    偏前端 + rsa加解密 + jsencrypt.min.js–(新增超长字符分段加解密) 复制代码 <html>2 <head>3 <title>JavaScri ...

  7. RSA加密web前端用户名密码加密传输至后台并解密

    RSA加密web前端用户名密码加密传输至后台并解密 编写加解密公共方法类RSAUtils import org.apache.commons.codec.binary.Base64; import j ...

  8. yii 加载php文件,Yii2框架加载css和js文件的方法分析

    本文实例讲述了Yii2框架加载css和js文件的方法.分享给大家供大家参考,具体如下: 1.第一步是要把我们的css.js文件放到web目录下 2.第二步修改assets/AppAsset.php文件 ...

  9. js延迟(异步)加载的6种方式 为什么要延迟加载js呢?

    对于js的优化(关于js的延迟加载)的好处是有助于提高页面加载速度,js延迟加载就是等页面加载完成之后在加载js文件.    之所以要优化是因为HTML元素是按其在页面中出现的次序调用的,如果用jav ...

最新文章

  1. 一文看懂模糊搜索1.0到3.0的算法迭代历程
  2. 深度学习(二十一)基于FCN的图像语义分割-CVPR 2015-未完待续
  3. Python学习笔录
  4. 在Dreamweaver中安装Emmet(zen-coding)
  5. 2015 Spark 将走向哪里?
  6. 动态网页开发基础【笔记】
  7. 如何理解有人说“真正的奇石收藏,从做减法开始”?
  8. Ubuntu 14 如何解压 .zip、.rar 文件
  9. sqlerver 字符串转整型_Sqlerver进行模糊查询like和转义字符
  10. 返回json格式报错:Inf and NaN cannot be JSON encoded
  11. aceadmin1.4框架treeview多选改造
  12. 基于uniapp开发的一款Android、iOS上使用的小说阅读app
  13. 树形结构的处理——组合模式(一)
  14. 说说家乡的旅游景点吧...
  15. 360浏览器,打开一个,为什么后台有多个360进程?
  16. Android模仿新浪微博(启动界面登陆界面)
  17. android 看图片tv版,易图浏览_易图浏览TV版APK下载_电视版 for 安卓TV_ZNDS软件
  18. HTML, CSS学习笔记(完整版)
  19. 听说根域名大部分在美国,美国能让中国从网络上消失?
  20. Nim游戏入门+SG函数

热门文章

  1. 水晶报表使用经验总结
  2. 国际法学19春在线作业1-0005
  3. android单机听歌软件,听歌用什么软件好?2018听歌软件推荐
  4. 阿里内核月报2017年02月
  5. icloud android,如何将照片从 iCloud 转移到 Android
  6. HMI智能座舱自动化测试之性能测试
  7. C语言杨辉三角的程序分析,C语言:打印杨辉三角
  8. 计算机组成原理之基本组成
  9. html多级列表不连续如何显示,完美解决word多级列表的编号不显示问题
  10. 加ing形式的单词有哪些_英语单词后面加ing的有哪四种情况?