国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Js參數RSA加密傳輸之jsencrypt.js的使用

2024-05-06 15:44:15
字體:
來源:轉載
供稿:網友

注意幾點:

  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("123456789");   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="15" cols="65">   MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCa4KHNwDX44gGmmIAtRu4gjVYtGWZzcm4t+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/DbTlG3ihsCT6dT9H5B9OoeR7K9VWUesaW/iyVL6HXiYOANabW14pvJATDmdq91Tfgp6PSQyvdfiRdV4r07crpQIDAQABAoGABb+3gdb+qeG0b1CogVsT/7//UOaTzPk/FGneKQQTf4SsN+H7lVhTYTG9ARFCJyoWg8IXqmn2ljhywHPTWWD2RCZIn2sYT1sVkGb70EgHGQLBraFHElmw+DsVJ+nDfBCfMrJ1TYXlwigjRkaueaoGgG8LdR8XD+Xs5LersPLjZgECQQCguSB7C4wF6oSwEDmwNF8ffT5cQc1U2OIq6NBG8rafrjb7LsjhOd03pmY7i4LbW3Vvq4AhQpJEdF1Cvd+Sk/BBAkEA9rBhqnyumV09zFEomSX3zZu+bdhTzM4bJDfEa95swp1gANCVvF/tDCnlBf51EhCWdeGSpARPUkQnXrYfFUDiZQJAAZEshuaa6+fYeVr/JP+tucHf3MhrdxtSQTbZ6QcuzqnFMXfIT6HfzU4bCxOWKAthPsB+VFSw1mgIDMGLL4OvwQJAJlVyV9PYLezXVZCnBmVoBINXLCqZmxHMFey0kS6XKAbcjEPdgNBHPcSk2jGYb540Q00yRFqHGPmORKF4Yw0aIQJAd5JRtD3z2MgP/vPoKHJNHqY8bboVcmwqVAm6xCZoTCZzjNV1Cnsdf4wBV3LCDzYBy+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 = 0;    ushort twobytes = 0;    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 = 0;   byte lowbyte = 0x00;   byte highbyte = 0x00;   int count = 0;   bt = binr.ReadByte();   if (bt != 0x02)    return 0;   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, 0);    }    else    {     count = bt;    }   while (binr.ReadByte() == 0x00)   {    count -= 1;   }   binr.BaseStream.Seek(-1, SeekOrigin.Current);   return count;  } }            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 株洲县| 安多县| 天镇县| 遂平县| 谢通门县| 独山县| 桦南县| 富源县| 玛沁县| 陇南市| 西畴县| 贵港市| 揭东县| 休宁县| 夏邑县| 巍山| 建昌县| 大厂| 资源县| 多伦县| 毕节市| 呼图壁县| 大化| 榆社县| 五河县| 石阡县| 西林县| 白水县| 监利县| 卓资县| 潍坊市| 大宁县| 玉门市| 翼城县| 丹江口市| 开原市| 柳林县| 武汉市| 贵溪市| 蒲江县| 平武县|