html部分

<html><head><title>JavaScript RSA Encryption</title><meta charset="UTF-8"><script src="js/jquery-1.11.3.min.js"></script><script src="js/jsencrypt.min.js"></script></head><body style="text-align: center;"><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="input">加密后的字符串:</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></body>
</html>

js部分

<script type="text/javascript">$(function() {$('#testme').click(function() {// 加密前的原文console.log('这是原文' + $('#input').val())// 进行RSA加密var encrypt = new JSEncrypt();encrypt.setPublicKey($('#pubkey').val());var encrypted = encrypt.encrypt($('#input').val());// 加密后的密文console.log('这是加密之后的' + encrypted);$('#jiami').val(encrypted);//解密var decrypt = new JSEncrypt();decrypt.setPrivateKey($('#privkey').val());var uncrypted = decrypt.decrypt(encrypted);console.log('这是解密后的密文' + uncrypted);$('#jiemi').val(uncrypted);});});</script>

jsencrypt.min.js下载地址:

github主页

官方网站
最终效果:

----新增超长字符分段加解密----
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;}
};

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

  1. rsa加解密 --- jsencrypt.min.js --- 支持长字符串分段加解密

    前端 + rsa加解密 + jsencrypt.min.js–(新增超长字符分段加解密) 分享2种,分段 和 不分段 加解密 --话不多说,直接上代码!~ 最终效果: 首先引入2个js <scr ...

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

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

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

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

  4. Java前端Rsa公钥加密,后端Rsa私钥解密(支持字符和中文)

    Base64工具类,可以让rsa编码的乱码变成一串字符序列 package com.utils;import java.io.ByteArrayInputStream; import java.io. ...

  5. 【JAVASCRIPT】-【RSA加密解密】02、前端RSA加密解密的实现方式

    前言 应项目需求需要使用RSA方式对数据进行加密解密 关于对称非对称加密解密详解参见:浩星博主的文章https://blog.csdn.net/qq_41619796/article/details/ ...

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

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

  7. RequireJs按需要加载angular模块和依赖,并且用r.js压缩打包js和css文件实现加载优化(图文)。

    RequireJS 是一个JavaScript模块加载器,使用RequireJS加载模块化脚本将提高代码的加载速度和质量.而且能保证其他依赖angular插件前提下才能使用的组件比如像自定义的指令和路 ...

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

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

  9. 工具类:登录密码的加解密(jsencrypt实现前端RSA非对称加密解密

    定义工具类:utils/jsenscrypt.js import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'// 密钥对生成 http://web.cha ...

最新文章

  1. 史上最简单的SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)(Finchley版本)
  2. 全网最详细SpringBatch批处理读取分区(Paratition)文件讲解
  3. 拿到大厂Offer了!
  4. 云计算发展备受瞩目的五大方向
  5. 共享单车的定位,应该是利用手机实现
  6. java二叉树递归算法_Java二叉树的四种遍历(递归和非递归)
  7. 破解Prezi桌面版30天限制的方法
  8. Axure中SVG矢量图标的使用方法及资源推荐
  9. 大明湖畔昇腾绽放,趵突泉里智能奔涌
  10. 战争游戏红龙mod简介
  11. 用计算机写欧拉恒等式,震惊!计算器里竟然藏着这样一个秘密!
  12. 天行健,君子以自强不息;地势坤,君子以厚德载物
  13. 巨人就在你的身边——14期英语反馈表彰大会有感
  14. CF1720A Burenka Plays with Fractions 题解
  15. 用java实现五子棋
  16. 百度云搜索引擎森林战士_华为拟安装“俄版安卓”;百度回应内部贪腐;Android Studio 3.5 RC2 发布 | 极客头条...
  17. 关于 Kubernetes 中通过 Kustomize 定制 Yaml资源文件的一些笔记
  18. 网络爬虫单线程的实现
  19. SAP中实现所见即所得的打印功能操作方法
  20. 手机的短消息实现目前有三种方法(转)

热门文章

  1. web前端基础——第八章
  2. ​建行数据从Teradata迁移到Greenplum大揭秘
  3. 有什么数据恢复软件好?
  4. 学习笔记整理:Photoshop软件应用-图层的应用和渐变工具
  5. 数据中心服务器大战:思科vs惠普vs…
  6. 【工具封装】Python 实现将阿拉伯数字 === 转换成中文大写数字
  7. 陪审团(01背包, 难)
  8. 四阶行列式如何降阶_四阶行列式用降阶法怎么计算 我要计算过程
  9. DirectX12_入门之三角形
  10. win7网络适配器_WIN7笔记本搜不到WiFi怎么办?