Js参数RSA加密传输,jsencrypt.js的使用
注意几点:
1、参数传递的+号处理,在传输时会把+变成空格,不处理后端就报错了。
1、前端代码
- <!DOCTYPE html>
- <html>
- <head>
- <meta name="viewport" content="width=device-width" />
- <title>Login</title>
- <script src="~/Scripts/jquery-1.10.2.min.js"></script>
- <script src="http://passport.cnblogs.com/scripts/jsencrypt.min.js"></script>
- <script type="text/javascript">
- $(function () {
- var encrypt = new JSEncrypt();
- encrypt.setPublicKey($("#tra").val());
- var data = encrypt.encrypt("");
- alert(data);
- $("#btn").click(function () {
- $.ajax({
- url: '@Url.Action("Login")',
- data: "pwd=" + encodeURI(data).replace(/\+/g, '%2B'), //+号的处理:因为数据在网络上传输时,非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,而base64编码在传输到后端的时候,+会变成空格,因此先替换掉。后端再替换回来
- type: 'post',
- success: function (msg) {
- alert(msg);
- }
- });
- });
- });
- </script>
- </head>
- <body>
- <div>
- <input type="button" id="btn" value="点我" />
- <textarea id="tra" rows="" cols="">
- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCa4KHNwDX44gGmmIAtRu4gjVYt
- GWZzcm4t+1wjUD4dn7fMLPvuK7ai4UrfDeEJE1RPwudJw+lJ6crql8wSIg7/DbTl
- G3ihsCT6dT9H5B9OoeR7K9VWUesaW/iyVL6HXiYOANabW14pvJATDmdq91Tfgp6P
- SQyvdfiRdV4r07crpQIDAQAB
- </textarea>
- <hr/>
- 注意+好的处理
- </div>
- </body>
- </html>
2、后端代码
- public class IndexController : Controller
- {
- public ActionResult Login()
- {
- return View();
- }
- [HttpPost]
- public ActionResult Login(string pwd)
- {
- //密钥格式要生成pkcs#1格式的 而不是pkcs#8格式的
- string privateKey = @"MIICWwIBAAKBgQCa4KHNwDX44gGmmIAtRu4gjVYtGWZzcm4t+1wjUD4dn7fMLPvuK7ai4UrfDeEJE1RPwudJw+lJ6crql8wSIg7/DbTlG3ihsCT6dT9H5B9OoeR7K9VW
- UesaW/iyVL6HXiYOANabW14pvJATDmdq91Tfgp6PSQyvdfiRdV4r07crpQIDAQAB
- AoGABb+3gdb+qeG0b1CogVsT/7//UOaTzPk/FGneKQQTf4SsN+H7lVhTYTG9ARFC
- JyoWg8IXqmn2ljhywHPTWWD2RCZIn2sYT1sVkGb70EgHGQLBraFHElmw+DsVJ+nD
- fBCfMrJ1TYXlwigjRkaueaoGgG8LdR8XD+Xs5LersPLjZgECQQCguSB7C4wF6oSw
- EDmwNF8ffT5cQc1U2OIq6NBG8rafrjb7LsjhOd03pmY7i4LbW3Vvq4AhQpJEdF1C
- vd+Sk/BBAkEA9rBhqnyumV09zFEomSX3zZu+bdhTzM4bJDfEa95swp1gANCVvF/t
- DCnlBf51EhCWdeGSpARPUkQnXrYfFUDiZQJAAZEshuaa6+fYeVr/JP+tucHf3Mhr
- dxtSQTbZ6QcuzqnFMXfIT6HfzU4bCxOWKAthPsB+VFSw1mgIDMGLL4OvwQJAJlVy
- V9PYLezXVZCnBmVoBINXLCqZmxHMFey0kS6XKAbcjEPdgNBHPcSk2jGYb540Q00y
- RFqHGPmORKF4Yw0aIQJAd5JRtD3z2MgP/vPoKHJNHqY8bboVcmwqVAm6xCZoTCZz
- jNV1Cnsdf4wBV3LCDzYBy+xR4qYNUy5CFXN+8WzzAA==";
- try
- {
- RSACryptoServiceProvider rsaCryptoServiceProvider = CreateRsaProviderFromPrivateKey(privateKey);
- //把+号,再替换回来
- byte[] res = rsaCryptoServiceProvider.Decrypt(Convert.FromBase64String(pwd.Replace("%2B","+")), false);
- return Content(Encoding.UTF8.GetString(res));
- }
- catch (Exception exception)
- {
- }
- return Content("");
- }
- private RSACryptoServiceProvider CreateRsaProviderFromPrivateKey(string privateKey)
- {
- var privateKeyBits = System.Convert.FromBase64String(privateKey);
- var RSA = new RSACryptoServiceProvider();
- var RSAparams = new RSAParameters();
- using (BinaryReader binr = new BinaryReader(new MemoryStream(privateKeyBits)))
- {
- byte bt = ;
- ushort twobytes = ;
- twobytes = binr.ReadUInt16();
- if (twobytes == 0x8130)
- binr.ReadByte();
- else if (twobytes == 0x8230)
- binr.ReadInt16();
- else
- throw new Exception("Unexpected value read binr.ReadUInt16()");
- twobytes = binr.ReadUInt16();
- if (twobytes != 0x0102)
- throw new Exception("Unexpected version");
- bt = binr.ReadByte();
- if (bt != 0x00)
- throw new Exception("Unexpected value read binr.ReadByte()");
- RSAparams.Modulus = binr.ReadBytes(GetIntegerSize(binr));
- RSAparams.Exponent = binr.ReadBytes(GetIntegerSize(binr));
- RSAparams.D = binr.ReadBytes(GetIntegerSize(binr));
- RSAparams.P = binr.ReadBytes(GetIntegerSize(binr));
- RSAparams.Q = binr.ReadBytes(GetIntegerSize(binr));
- RSAparams.DP = binr.ReadBytes(GetIntegerSize(binr));
- RSAparams.DQ = binr.ReadBytes(GetIntegerSize(binr));
- RSAparams.InverseQ = binr.ReadBytes(GetIntegerSize(binr));
- }
- RSA.ImportParameters(RSAparams);
- return RSA;
- }
- private int GetIntegerSize(BinaryReader binr)
- {
- byte bt = ;
- byte lowbyte = 0x00;
- byte highbyte = 0x00;
- int count = ;
- bt = binr.ReadByte();
- if (bt != 0x02)
- return ;
- bt = binr.ReadByte();
- if (bt == 0x81)
- count = binr.ReadByte();
- else
- if (bt == 0x82)
- {
- highbyte = binr.ReadByte();
- lowbyte = binr.ReadByte();
- byte[] modint = { lowbyte, highbyte, 0x00, 0x00 };
- count = BitConverter.ToInt32(modint, );
- }
- else
- {
- count = bt;
- }
- while (binr.ReadByte() == 0x00)
- {
- count -= ;
- }
- binr.BaseStream.Seek(-, SeekOrigin.Current);
- return count;
- }
- }
Js参数RSA加密传输,jsencrypt.js的使用的更多相关文章
- Python3 实现 JS 中 RSA 加密的 NoPadding 模式
前因后果之哗啦啦废话连篇: 这几天本人在 Python 做某网站登陆的时候,发现其登陆时用户名和密码被加密了 F12 仔细看了一下,发现是调用了一个 js 的 rsa 加密库,页面 dom 中有 rs ...
- RSA加密传输代码示例
RSA加密传输代码示例 涉及敏感数据的传输,双方最好约定使用加密解密.那RSA非对称加密就大有作为了.服务端可以保留自己的私钥,发给客户端对应的公钥.这样就可以互相加解密了.php中rsa加解密实现: ...
- RSA加密——前端JSEncrypt
RSA加密--前端JSEncrypt 介绍 JSEncrypt是一个RSA加密库,在没有SSL加密传输通道支持https协议的情况下,该库可以在http传输重要信息如时,保证数据的安全性.我们小组 ...
- 分享如何使用PHP将URL地址参数进行加密传输提高网站安全性
大家在使用PHP进行GET或POST提交数据时,经常会在URL带着参数进行传递,比如www.mdaima.com/get.php?id=1&page=5,这里就将id编号和page页码进行了参 ...
- 使用jsencrypt(rsa加密方式)给js加密防被刷
加密步骤 1.需要加密的参数 * * ).toISOString().replace(/T/g, }Z/, ''); //使用本地时间,然后转换格式 2.js中引用jsencrypt.js文件,然后实 ...
- jsencrypt代码分析——openssl的rsa加密解密在js的实现
在js上做rsa,感觉jsencrypt这个是封装的比较好的,但用起来还是遇到了些坑,所以踩进代码里填填坑- 项目在这里 https://github.com/travist/jsencrypt [r ...
- JS客户端RSA加密,Java服务端解密
常用语网页客户端对密码加密,在后端java解密还原 java代码依赖 <dependency> <groupId>commons-codec</group ...
- 用cryptico.js实现RSA加密(应对cryptico不支持PEM)
问题: 随手分享一下好了,这个问题困扰了很久. cryptico.js这个加密算法库很全,很适合在前端用到各种加密解密算法的需求.但是美中不足的是,它的RSA加密不支持PEM格式,所以如果你后端用ja ...
- JS 使用RSA加密解密
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>使 ...
随机推荐
- C#编写的序列化通用类代码
using System; using System.IO; using System.IO.Compression; using System.Runtime.Serialization.Forma ...
- OPNET安装要点
最近在做一点网络的仿真工作,需要用到OPNET这个工具,安装了一早上终于安装好了.安装过程如下: 1.安装visual studio 2010:其他版本如vs2005, vs2008也是可以的.vs2 ...
- 【HDOJ】1243 反恐训练营
LCS. /* 1243 */ #include <cstdio> #include <cstring> #include <cstdlib> #define MA ...
- BZOJ 1013 [JSOI2008]球形空间产生器sphere
1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3074 Solved: 1614[Subm ...
- Largest Number——LeetCode
Given a list of non negative integers, arrange them such that they form the largest number. For exam ...
- 挂载nfs系统问题之: Root-NFS: Server returned error -13 while mounting
今天换了个路由器,由于是自动分的IP,现在的IP和之前的不在同一网段.以前是192.168.0.xxx,现在是192.168.1.xxx.本以为将serverip,ipaddr,bootargs这些参 ...
- 9月19号-9月21号丰宁坝上草原行 - 营销系统 - 京东内部论坛 - Powered by Discuz!
9月19号-9月21号丰宁坝上草原行 - 营销系统 - 京东内部论坛 - Powered by Discuz! 9月19号-9月21号丰宁坝上草原行 [复制链接]
- Git详解之二 Git基础
Git 基础 读完本章你就能上手使用 Git 了.本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令.读完本章,你就能初始化一个新的代码仓库,做一些适当配置: ...
- JS 时间格式CST转GMT
近几天,在做百度地图时,需要转换时间格式并做显示,但是发现显示的时间格式,出现了错乱,二者的日期和小时都出现了变动.例如: 原始时间格式:Thu Aug 18 20:38:54 CST 2016 转换 ...
- 用UBOOT自带loadb命令加载应用程序到SDRAM中运行的方法
S3C44B0开发板中,用UBOOT自带loadb命令加载应用程序到SDRAM中运行的方法 1.开发板说明: 开发板上已有移植好的UBOOT运行. 2.交叉编译工具链为arm-linu-g ...