流程:

第一步:返回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加密,前端加密,后端解密,有效哦!相关推荐

  1. 前端php解密,转发:RSA实现JS前端加密,PHP后端解密

    web前端,用户注册与登录,不能直接以明文形式提交用户密码,容易被截获,这时就引入RSA. 前端加密 需引入4个JS扩展文件,jsbn.js.prng4.js.rng.js和rsa.js. RSA L ...

  2. 前端加密php后端解密,使用RSA怎么实现JavaScript前端加密与PHP后端解密功能

    使用RSA怎么实现JavaScript前端加密与PHP后端解密功能 发布时间:2021-02-08 15:19:14 来源:亿速云 阅读:97 作者:Leah 这期内容当中小编将会给大家带来有关使用R ...

  3. 关于RSA加密技术的使用,js前端加密,Golang 后端解密 详细

    关于RSA加密技术的使用,js前端加密,Golang 后端解密 详细 关于rsa 加密算法 可自行参考 rsa算法 前端JS如何使用rsa进行加密 安装jsencrypt[二选一] github下载地 ...

  4. rsa php前台加密后台解密源码,使用RSA实现前端公钥加密后端私钥解密

    项目中在用户登录时需要进行用户名和密码加密,这里选用了RSA非对称加密的方式. 公钥私钥:OpenSSL的公钥私钥(Node crypto模块限制) 前端: jsencrypt库加密 后端: Node ...

  5. 前端加密中文,后端解密java

    1.前端代码 我们可以使用js自动加密工具 var encStr = encodeURIComponent(username);encStr = btoa(encStr); 2.后端解密代码 pack ...

  6. JS前端加密、JAVA后端解密详解

    最近有一个加解密的需求,其实没有什么难度,但是实践过程中踩了很多坑,把踩坑过程分享出来. 1.前端JS加密 aesMinEncrypt: function(key, iv, word){var _wo ...

  7. 前端JS RSA加密,PHP后端解密实现密码安全传输

    在设计用户注册登陆系统的时候,密码的安全传输一直是一个需要特别引起注意的地方,很多网站包括大型网站依然还是采用明文传输密码的方式,安全隐患需要注意.当然,为了防止第三人的恶意窃听,不少网站已经启用了H ...

  8. ss加密php,js前端加密,php后端解密(crypto-js,openssl_decrypt)

    基于PHP和JS的AES相互加密解密方法详解(CryptoJS) 基于PHP和JS的AES相互加密解密方法详解(CryptoJS) 注意说明: 1. 首先引入CryptoJS包中的aes.js和pad ...

  9. java AES加密 前端CryptoJS AES解密

    问题 java加密生成base64位字符串,前端使用Java提供的密钥,前端无法解密出数据. java后台加密使用AES/ECB/PKCS5Padding 数据准备: 一个固定秘钥,互相约定 B7E1 ...

  10. 国密SM2的前端加密,后端解密(Java版本)及SM3 摘要加密

    一.简介 国密即国家密码局认定的国产密码算法.常用的主要有SM2,SM3,SM4. SM2:椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,为非对称加密,基于ECC.该算法已公开.由于该算法基于EC ...

最新文章

  1. 2022-2028年中国草炭土行业市场研究及前瞻分析报告
  2. Go 学习笔记(25)— 并发(04)[有缓冲/无缓冲通道、WaitGroup 协程同步、select 多路监听通道、close 关闭通道、channel 传参或作为结构体成员]
  3. VS2015 + CUDA 8.0 配置GTX1070的OpenCL 开发环境
  4. ffplay分析(从启动到读取数据线程插入到字幕、音频、视频解码前的队列操作)
  5. 机器学习速成课程 | 练习 | Google Development——编程练习:使用 TensorFlow 的起始步骤
  6. spring3.0 aop 获取 ibatis 执行的语句_Mybatis 源码分析:执行器
  7. ionic 去掉启动页的加载动画 菊花转
  8. 计算机导论声明型摆设,《计算机导论作业-论文排档》.doc
  9. HttpModuel
  10. NLPCC 2021会议的“面向智能辩论的论辩文本理解”评测比赛综述报告
  11. (6)数据分析-方差分析
  12. plc c语言做报警,wincc声音报警C脚本版
  13. pdf添加水印的方法
  14. Xshell常用功能
  15. 使用Keras基于RCNN类模型的卫星/遥感地图图像语义分割
  16. 小孩拉肚子不能吃什么?
  17. Android 手机上获取手机当前上网IP地址(手机网关给手机号分配的IP)
  18. 计算机一级基础及msoffice应用,全国计算机等级考试教程一级计算机基础及MS Office应用...
  19. 火狐浏览器播放媒体没有声音怎么办?
  20. 安装Mysql时端口号3306被占用,解决方法

热门文章

  1. kalibr源码解析之fov模型重投影误差计算
  2. 怎么删除或者彻底卸载输入法
  3. 推荐系统的冷启动与效果评估
  4. acm会议什么档次_国际顶级会议期刊级别介绍
  5. IIS部署,发布网站
  6. emule中节点加入Kad网络过程(源代码详解)
  7. 微信小程序开发工具调试没问题,真机调试Provisional headers are shown
  8. 让TQ2440也用上设备树 (device tree 操作实例3_重要,对于移植很有参考价值_code)
  9. 安卓-几种查看SHA1和MD5的方法
  10. Modern C++ 书籍推荐