日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【ASP.NET】RSA加密,前端加密,后端解密,有效哦!

發布時間:2023/12/20 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【ASP.NET】RSA加密,前端加密,后端解密,有效哦! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

流程:

第一步:返回publicKey前端,用來對password等敏感字段的加密。

第二步:前端進行password敏感字段的加密。

第三步:post數據給后端。

第四步:用privateKey進行解密。

一、相關JS包和引用BIN文件,下載鏈接:

https://download.csdn.net/download/u012949335/20389382

二、前端如下:

<div class="from"><div class="from-group"><input type="text" class="inputtext width280" id="UserId" name="UserId" placeholder="請輸入用戶名" /></div><div class="from-group"><input type="password" class="inputtext width280" id="Password" name="Password" placeholder="請輸入密碼" /></div><div class="from-group"><input type="text" class="inputtext width160" id="VeriCode" name="VeriCode" placeholder="請輸入驗證碼" /><img id="imgVerifi" title="單擊換一張驗證碼" class="inputimage" src="verificationcode" onclick="changecode()" /></div><div class="from-group"><button id="btnlogin" class="btn" onclick="loginform(); return false">登 錄</button></div><input id="pubkey" type="hidden" value='@ViewBag.pubkey' /></div>

<script type="text/javascript">function loginform() {var info = new Object();info.UserId = $("#UserId").val();var EncryptPwd = $("#Password").val();var rsa = new JSEncrypt();var pubkey = $("#pubkey").val();rsa.setPublicKey(pubkey);var rsa_p = rsa.encrypt(EncryptPwd);info.Password = rsa_p;info.VeriCode = $("#VeriCode").val();var jsonObject = JSON.stringify(info);$.ajax({type: 'post',url: "Login",dataType: "json", //返回json格式的數據data: { 'json': jsonObject },cache: false,success: function (data) {if (data.jg == "1") {}else {}},error: function (e) {var msg = responseTextTitle(e.responseText);$.messager.alert("提示", msg, "error");}});}</script>

三、后端如下:

[AllowAnonymous]public ActionResult Login(){List<string> keys = Common.Common.CreateKeyPair();ViewBag.pubkey = keys[0];Session["publickey"] = keys[0];Session["privatekey"] = keys[1];return View();} /// <summary>/// 登陸/// </summary>/// <returns></returns>[HttpPost][AllowAnonymous]public ActionResult Login(string json){LoginModel model = new LoginModel();model = JsonUtility.Json2Info<LoginModel>(json);Dictionary<String, Object> jsonMap = new Dictionary<String, Object>(); string rejson = string.Empty; var privatekey = Session["privatekey"].ToString();var Password = Common.Common.Decrypt(privatekey, model.Password);model.Password = Password;model.UserId = model.UserId.Trim();string msg = "";BLL.sys_user dal = new BLL.sys_user();if (dal.DoLogin(model, out msg)){jsonMap.Add("jg", "1");rejson = JsonUtility.Info2Json(jsonMap);return Content(rejson);}else{jsonMap.Add("jg", "0");jsonMap.Add("msg", msg);rejson = JsonUtility.Info2Json(jsonMap);return Content(rejson);}} using Org.BouncyCastle.Crypto.Generators; using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Security; using Org.BouncyCastle.OpenSsl; using Org.BouncyCastle.Crypto.Encodings; using Org.BouncyCastle.Crypto.Engines;namespace YidiKy.Common {public class Common{#region 公鑰和私鑰加解密/// <summary>/// 隨機獲取公鑰和私鑰的字符/// </summary>/// <param name="strength">長度</param>/// <returns></returns>public static List<string> CreateKeyPair(int strength = 1024){RsaKeyPairGenerator r = new RsaKeyPairGenerator();r.Init(new KeyGenerationParameters(new SecureRandom(), strength));AsymmetricCipherKeyPair keys = r.GenerateKeyPair();TextWriter privateTextWriter = new StringWriter();PemWriter privatePemWriter = new PemWriter(privateTextWriter);privatePemWriter.WriteObject(keys.Private);privatePemWriter.Writer.Flush();TextWriter publicTextWriter = new StringWriter();PemWriter publicPemWriter = new PemWriter(publicTextWriter);publicPemWriter.WriteObject(keys.Public);publicPemWriter.Writer.Flush();List<string> revalue = new List<string>();revalue.Add(publicTextWriter.ToString());revalue.Add(privateTextWriter.ToString());return revalue;}/// <summary>/// RSA加密 將公鑰導入到RSA對象中,準備加密/// </summary>/// <param name="PublicKey">公鑰</param>/// <param name="encryptstring">待加密的字符串</param>public static string RSAEncrypt(string PublicKey, string encryptstring){using (TextReader reader = new StringReader(PublicKey)){dynamic key = new PemReader(reader).ReadObject();var rsaDecrypt = new Pkcs1Encoding(new RsaEngine());if (key is AsymmetricKeyParameter){key = (AsymmetricKeyParameter)key;}else if (key is AsymmetricCipherKeyPair){key = ((AsymmetricCipherKeyPair)key).Private;}rsaDecrypt.Init(true, key); //這里加密是true;解密是false byte[] DataToEncrypt = Encoding.UTF8.GetBytes(encryptstring);byte[] outBytes = rsaDecrypt.ProcessBlock(DataToEncrypt, 0, DataToEncrypt.Length);//加密string strBase64 = Convert.ToBase64String(outBytes);return strBase64;}}/// <summary>/// RSA加密 將私鑰導入到RSA對象中,準備解密/// </summary>/// <param name="privateKey">私鑰</param>/// <param name="decryptstring">待解密的字符串</param>/// <returns></returns>public static string Decrypt(string privateKey, string decryptstring){using (TextReader reader = new StringReader(privateKey)){dynamic key = new PemReader(reader).ReadObject();var rsaDecrypt = new Pkcs1Encoding(new RsaEngine());if (key is AsymmetricKeyParameter){key = (AsymmetricKeyParameter)key;}else if (key is AsymmetricCipherKeyPair){key = ((AsymmetricCipherKeyPair)key).Private;}rsaDecrypt.Init(false, key); //這里加密是true;解密是false byte[] entData = Convert.FromBase64String(decryptstring);entData = rsaDecrypt.ProcessBlock(entData, 0, entData.Length);return Encoding.UTF8.GetString(entData);}}#endregion} }

總結

以上是生活随笔為你收集整理的【ASP.NET】RSA加密,前端加密,后端解密,有效哦!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。