注意几点:

  1、参数传递的+号处理,在传输时会把+变成空格,不处理后端就报错了。

1、前端代码

  1. <!DOCTYPE html>
  2.  
  3. <html>
  4. <head>
  5. <meta name="viewport" content="width=device-width" />
  6. <title>Login</title>
  7. <script src="~/Scripts/jquery-1.10.2.min.js"></script>
  8. <script src="http://passport.cnblogs.com/scripts/jsencrypt.min.js"></script>
  9. <script type="text/javascript">
  10. $(function () {
  11. var encrypt = new JSEncrypt();
  12. encrypt.setPublicKey($("#tra").val());
  13. var data = encrypt.encrypt("");
  14. alert(data);
  15. $("#btn").click(function () {
  16. $.ajax({
  17. url: '@Url.Action("Login")',
  18. data: "pwd=" + encodeURI(data).replace(/\+/g, '%2B'), //+号的处理:因为数据在网络上传输时,非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,而base64编码在传输到后端的时候,+会变成空格,因此先替换掉。后端再替换回来
  19. type: 'post',
  20. success: function (msg) {
  21. alert(msg);
  22. }
  23. });
  24. });
  25.  
  26. });
  27.  
  28. </script>
  29. </head>
  30. <body>
  31. <div>
  32. <input type="button" id="btn" value="点我" />
  33. <textarea id="tra" rows="" cols="">
  34. MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCa4KHNwDX44gGmmIAtRu4gjVYt
  35. GWZzcm4t+1wjUD4dn7fMLPvuK7ai4UrfDeEJE1RPwudJw+lJ6crql8wSIg7/DbTl
  36. G3ihsCT6dT9H5B9OoeR7K9VWUesaW/iyVL6HXiYOANabW14pvJATDmdq91Tfgp6P
  37. SQyvdfiRdV4r07crpQIDAQAB
  38. </textarea>
  39. <hr/>
  40. 注意+好的处理
  41. </div>
  42. </body>
  43. </html>

2、后端代码

  1. public class IndexController : Controller
  2. {
  3. public ActionResult Login()
  4. {
  5. return View();
  6. }
  7.  
  8. [HttpPost]
  9. public ActionResult Login(string pwd)
  10. {
  11. //密钥格式要生成pkcs#1格式的 而不是pkcs#8格式的
  12. string privateKey = @"MIICWwIBAAKBgQCa4KHNwDX44gGmmIAtRu4gjVYtGWZzcm4t+1wjUD4dn7fMLPvuK7ai4UrfDeEJE1RPwudJw+lJ6crql8wSIg7/DbTlG3ihsCT6dT9H5B9OoeR7K9VW
  13. UesaW/iyVL6HXiYOANabW14pvJATDmdq91Tfgp6PSQyvdfiRdV4r07crpQIDAQAB
  14. AoGABb+3gdb+qeG0b1CogVsT/7//UOaTzPk/FGneKQQTf4SsN+H7lVhTYTG9ARFC
  15. JyoWg8IXqmn2ljhywHPTWWD2RCZIn2sYT1sVkGb70EgHGQLBraFHElmw+DsVJ+nD
  16. fBCfMrJ1TYXlwigjRkaueaoGgG8LdR8XD+Xs5LersPLjZgECQQCguSB7C4wF6oSw
  17. EDmwNF8ffT5cQc1U2OIq6NBG8rafrjb7LsjhOd03pmY7i4LbW3Vvq4AhQpJEdF1C
  18. vd+Sk/BBAkEA9rBhqnyumV09zFEomSX3zZu+bdhTzM4bJDfEa95swp1gANCVvF/t
  19. DCnlBf51EhCWdeGSpARPUkQnXrYfFUDiZQJAAZEshuaa6+fYeVr/JP+tucHf3Mhr
  20. dxtSQTbZ6QcuzqnFMXfIT6HfzU4bCxOWKAthPsB+VFSw1mgIDMGLL4OvwQJAJlVy
  21. V9PYLezXVZCnBmVoBINXLCqZmxHMFey0kS6XKAbcjEPdgNBHPcSk2jGYb540Q00y
  22. RFqHGPmORKF4Yw0aIQJAd5JRtD3z2MgP/vPoKHJNHqY8bboVcmwqVAm6xCZoTCZz
  23. jNV1Cnsdf4wBV3LCDzYBy+xR4qYNUy5CFXN+8WzzAA==";
  24.  
  25. try
  26. {
  27. RSACryptoServiceProvider rsaCryptoServiceProvider = CreateRsaProviderFromPrivateKey(privateKey);
  28. //把+号,再替换回来
  29. byte[] res = rsaCryptoServiceProvider.Decrypt(Convert.FromBase64String(pwd.Replace("%2B","+")), false);
  30.  
  31. return Content(Encoding.UTF8.GetString(res));
  32. }
  33. catch (Exception exception)
  34. {
  35.  
  36. }
  37.  
  38. return Content("");
  39. }
  40. private RSACryptoServiceProvider CreateRsaProviderFromPrivateKey(string privateKey)
  41. {
  42. var privateKeyBits = System.Convert.FromBase64String(privateKey);
  43.  
  44. var RSA = new RSACryptoServiceProvider();
  45. var RSAparams = new RSAParameters();
  46.  
  47. using (BinaryReader binr = new BinaryReader(new MemoryStream(privateKeyBits)))
  48. {
  49. byte bt = ;
  50. ushort twobytes = ;
  51. twobytes = binr.ReadUInt16();
  52. if (twobytes == 0x8130)
  53. binr.ReadByte();
  54. else if (twobytes == 0x8230)
  55. binr.ReadInt16();
  56. else
  57. throw new Exception("Unexpected value read binr.ReadUInt16()");
  58.  
  59. twobytes = binr.ReadUInt16();
  60. if (twobytes != 0x0102)
  61. throw new Exception("Unexpected version");
  62.  
  63. bt = binr.ReadByte();
  64. if (bt != 0x00)
  65. throw new Exception("Unexpected value read binr.ReadByte()");
  66.  
  67. RSAparams.Modulus = binr.ReadBytes(GetIntegerSize(binr));
  68. RSAparams.Exponent = binr.ReadBytes(GetIntegerSize(binr));
  69. RSAparams.D = binr.ReadBytes(GetIntegerSize(binr));
  70. RSAparams.P = binr.ReadBytes(GetIntegerSize(binr));
  71. RSAparams.Q = binr.ReadBytes(GetIntegerSize(binr));
  72. RSAparams.DP = binr.ReadBytes(GetIntegerSize(binr));
  73. RSAparams.DQ = binr.ReadBytes(GetIntegerSize(binr));
  74. RSAparams.InverseQ = binr.ReadBytes(GetIntegerSize(binr));
  75. }
  76.  
  77. RSA.ImportParameters(RSAparams);
  78. return RSA;
  79. }
  80. private int GetIntegerSize(BinaryReader binr)
  81. {
  82. byte bt = ;
  83. byte lowbyte = 0x00;
  84. byte highbyte = 0x00;
  85. int count = ;
  86. bt = binr.ReadByte();
  87. if (bt != 0x02)
  88. return ;
  89. bt = binr.ReadByte();
  90.  
  91. if (bt == 0x81)
  92. count = binr.ReadByte();
  93. else
  94. if (bt == 0x82)
  95. {
  96. highbyte = binr.ReadByte();
  97. lowbyte = binr.ReadByte();
  98. byte[] modint = { lowbyte, highbyte, 0x00, 0x00 };
  99. count = BitConverter.ToInt32(modint, );
  100. }
  101. else
  102. {
  103. count = bt;
  104. }
  105.  
  106. while (binr.ReadByte() == 0x00)
  107. {
  108. count -= ;
  109. }
  110. binr.BaseStream.Seek(-, SeekOrigin.Current);
  111. return count;
  112. }
  113. }

Js参数RSA加密传输,jsencrypt.js的使用的更多相关文章

  1. Python3 实现 JS 中 RSA 加密的 NoPadding 模式

    前因后果之哗啦啦废话连篇: 这几天本人在 Python 做某网站登陆的时候,发现其登陆时用户名和密码被加密了 F12 仔细看了一下,发现是调用了一个 js 的 rsa 加密库,页面 dom 中有 rs ...

  2. RSA加密传输代码示例

    RSA加密传输代码示例 涉及敏感数据的传输,双方最好约定使用加密解密.那RSA非对称加密就大有作为了.服务端可以保留自己的私钥,发给客户端对应的公钥.这样就可以互相加解密了.php中rsa加解密实现: ...

  3. RSA加密——前端JSEncrypt

    RSA加密--前端JSEncrypt 介绍 ​ JSEncrypt是一个RSA加密库,在没有SSL加密传输通道支持https协议的情况下,该库可以在http传输重要信息如时,保证数据的安全性.我们小组 ...

  4. 分享如何使用PHP将URL地址参数进行加密传输提高网站安全性

    大家在使用PHP进行GET或POST提交数据时,经常会在URL带着参数进行传递,比如www.mdaima.com/get.php?id=1&page=5,这里就将id编号和page页码进行了参 ...

  5. 使用jsencrypt(rsa加密方式)给js加密防被刷

    加密步骤 1.需要加密的参数 * * ).toISOString().replace(/T/g, }Z/, ''); //使用本地时间,然后转换格式 2.js中引用jsencrypt.js文件,然后实 ...

  6. jsencrypt代码分析——openssl的rsa加密解密在js的实现

    在js上做rsa,感觉jsencrypt这个是封装的比较好的,但用起来还是遇到了些坑,所以踩进代码里填填坑- 项目在这里 https://github.com/travist/jsencrypt [r ...

  7. JS客户端RSA加密,Java服务端解密

    常用语网页客户端对密码加密,在后端java解密还原 java代码依赖    <dependency>      <groupId>commons-codec</group ...

  8. 用cryptico.js实现RSA加密(应对cryptico不支持PEM)

    问题: 随手分享一下好了,这个问题困扰了很久. cryptico.js这个加密算法库很全,很适合在前端用到各种加密解密算法的需求.但是美中不足的是,它的RSA加密不支持PEM格式,所以如果你后端用ja ...

  9. JS 使用RSA加密解密

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>使 ...

随机推荐

  1. C#编写的序列化通用类代码

    using System; using System.IO; using System.IO.Compression; using System.Runtime.Serialization.Forma ...

  2. OPNET安装要点

    最近在做一点网络的仿真工作,需要用到OPNET这个工具,安装了一早上终于安装好了.安装过程如下: 1.安装visual studio 2010:其他版本如vs2005, vs2008也是可以的.vs2 ...

  3. 【HDOJ】1243 反恐训练营

    LCS. /* 1243 */ #include <cstdio> #include <cstring> #include <cstdlib> #define MA ...

  4. BZOJ 1013 [JSOI2008]球形空间产生器sphere

    1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3074  Solved: 1614[Subm ...

  5. Largest Number——LeetCode

    Given a list of non negative integers, arrange them such that they form the largest number. For exam ...

  6. 挂载nfs系统问题之: Root-NFS: Server returned error -13 while mounting

    今天换了个路由器,由于是自动分的IP,现在的IP和之前的不在同一网段.以前是192.168.0.xxx,现在是192.168.1.xxx.本以为将serverip,ipaddr,bootargs这些参 ...

  7. 9月19号-9月21号丰宁坝上草原行 - 营销系统 - 京东内部论坛 - Powered by Discuz!

    9月19号-9月21号丰宁坝上草原行 - 营销系统 - 京东内部论坛 - Powered by Discuz! 9月19号-9月21号丰宁坝上草原行   [复制链接]

  8. Git详解之二 Git基础

    Git 基础 读完本章你就能上手使用 Git 了.本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令.读完本章,你就能初始化一个新的代码仓库,做一些适当配置: ...

  9. JS 时间格式CST转GMT

    近几天,在做百度地图时,需要转换时间格式并做显示,但是发现显示的时间格式,出现了错乱,二者的日期和小时都出现了变动.例如: 原始时间格式:Thu Aug 18 20:38:54 CST 2016 转换 ...

  10. 用UBOOT自带loadb命令加载应用程序到SDRAM中运行的方法

    S3C44B0开发板中,用UBOOT自带loadb命令加载应用程序到SDRAM中运行的方法    1.开发板说明:  开发板上已有移植好的UBOOT运行.   2.交叉编译工具链为arm-linu-g ...