注册时候使用 RSA 实现前台对密码加密和后台解密
来源:互联网 发布:织梦源码安装方法 编辑:程序博客网 时间:2024/05/28 15:07
注册时候使用 RSA 实现前台对密码加密和后台解密
原理这里就不分析了,直接干货奉上。orchard中写的一个moudle,也就是C# mvc代码。
前台加密部分
首先项目中引用三个 js 文件
- rsa.js
- Barrett.js
- BigInt.js
前台header上加入js代码
function RSAPassAndSubmit(passTxtBox, confirmPassTxtBox, exponent, modulus) { setMaxDigits(130); var key = new RSAKeyPair(exponent, "", modulus); passTxtBox.value = encryptedString(key, passTxtBox.value); confirmPassTxtBox.value = encryptedString(key, confirmPassTxtBox.value); }
注册的button上加入事件
<button class="primaryAction btn btn-default" type="submit" id="btnRegister" onsubmit="javascript:return validatePlus();" onclick="@string.Format("javascript:RSAPassAndSubmit(Password,ConfirmPassword,'{0}','{1}');", ViewData["Exponent"], ViewData["Modulus"])" > @T("註冊")</button>
关于ViewData[“Exponent”],ViewData[“Modulus”]),这两个参数是后台传过来的
后台代码
对前台加密传过来的密码进行解密了
当然首先前台还需要的东西 加密键值对 要给他传过去。
private const string RsaKeyname = "RSAKeyPair";//第一次执行的时候调用,当然在执行post的时候,比如注册不成功,我们还需要在调用InitialRsaViewData()方法 初始化返回view().public ActionResult Register() { InitialRsaViewData(); return View(); }/// <summary>/// Create Exponent and Modulus For RSA Encrypt Password /// </summary>private void InitialRsaViewData() { var rsa = new RSACryptoServiceProvider(1024); RSAParameters para = rsa.ExportParameters(true); ViewData["Exponent"] = _userAcountService.BytesToHex(para.Exponent); ViewData["Modulus"] = _userAcountService.BytesToHex(para.Modulus); Session[RsaKeyname] = para; }
上面的还有两个方法BytesToHex(),BytesToHex()是写在serivice中的,可以拿出来:
public string BytesToHex(byte[] input) { StringBuilder hexString = new StringBuilder(64); for (int i = 0; i < input.Length; i++) { hexString.Append(String.Format("{0:X2}", input[i])); } return hexString.ToString(); } public byte[] HexToBytes(string hex) { if (hex.Length == 0) { return new byte[] { 0 }; } if (hex.Length % 2 == 1) { hex = "0" + hex; } byte[] result = new byte[hex.Length / 2]; for (int i = 0; i < hex.Length / 2; i++) { result[i] = byte.Parse(hex.Substring(2 * i, 2), System.Globalization.NumberStyles.AllowHexSpecifier); } return result; }
然后就是解密方法了,需要对密码操作的地方调用一下
/// <summary> /// The password to decrypt /// </summary> /// <param name="s"></param> /// <returns></returns> private string RsaDecrypt(string s) { var rsa = new RSACryptoServiceProvider(); rsa.ImportParameters((RSAParameters)Session[RsaKeyname]); string strPassword = System.Text.Encoding.ASCII.GetString(rsa.Decrypt(_userAcountService.HexToBytes(s), false)); return strPassword; }
[toc]
再说说遇到的一些问题吧,在chrome中运行程序的时候,我一开始把解密方法没封装成函数,直接写,也就是同时解密password和confirmPassword,出现不正确的数据什么的bug。不管他,但是单一的解密又是可以的,后来把chrome的缓存关了,就好了。乱七八糟的bug,orchad破玩意~~
0 0
- 注册时候使用 RSA 实现前台对密码加密和后台解密
- 关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
- 关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
- RSA前台加密后台解密
- rsa实现js前台加密java后台解密
- rsa实现js前台加密java后台解密
- rsa实现js前台加密java后台解密
- rsa实现js前台加密java后台解密
- RSA加密和解密实现
- JS前台加密,java后台解密实现
- JS前台加密,java后台解密实现
- 加密和解密会员注册密码
- 加密和解密会员注册密码
- iOS 与Java 配合在用户登录的时候对用户名和密码进行RSA加密
- 通过ios实现RSA加密和解密
- java实现RSA加密和解密
- RSA加密和解密
- RSA 加密和解密
- vi hello, world!
- LINUX下的C++编译器GCC简介
- ThreadLocal模式
- firefox 命令行参数
- 海量图片存储策略
- 注册时候使用 RSA 实现前台对密码加密和后台解密
- 美国必将毁于烙印
- 数学基础:角度,弧度,三角函数
- EQ降龙18掌
- 备忘 windows 8.1 开发
- GitHub使用流程- Git Shell 的一些命令总结(二) 创建代码库并学会更新
- Binary Tree Postorder Traversal
- ObjectC语言基础4—ARC、成员变量、构造方法、property
- 获取来访IP和来访地址