【ASP.NET】RSA加密,前端加密,后端解密,有效哦!
生活随笔
收集整理的這篇文章主要介紹了
【ASP.NET】RSA加密,前端加密,后端解密,有效哦!
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
流程:
第一步:返回publicKey前端,用來對(duì)password等敏感字段的加密。
第二步:前端進(jìn)行password敏感字段的加密。
第三步:post數(shù)據(jù)給后端。
第四步:用privateKey進(jìn)行解密。
一、相關(guān)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="請(qǐng)輸入用戶名" /></div><div class="from-group"><input type="password" class="inputtext width280" id="Password" name="Password" placeholder="請(qǐng)輸入密碼" /></div><div class="from-group"><input type="text" class="inputtext width160" id="VeriCode" name="VeriCode" placeholder="請(qǐng)輸入驗(yàn)證碼" /><img id="imgVerifi" title="單擊換一張驗(yàn)證碼" 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格式的數(shù)據(jù)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>/// 隨機(jī)獲取公鑰和私鑰的字符/// </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加密 將公鑰導(dǎo)入到RSA對(duì)象中,準(zhǔn)備加密/// </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加密 將私鑰導(dǎo)入到RSA對(duì)象中,準(zhǔn)備解密/// </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} }總結(jié)
以上是生活随笔為你收集整理的【ASP.NET】RSA加密,前端加密,后端解密,有效哦!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谈谈分治算法思想
- 下一篇: python与c语言混合编程_pytho