RSA非对称性前端加密后端解密
前端加密代码
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>RSA非对称加密登录</title>
<script src="~/JS/jquery-1.8.1.min.js"></script><script src="~/JS/RSA.js"></script>
<script src="~/JS/BigInt.js"></script>
<script src="~/JS/Barrett.js"></script>
<script type="text/javascript">
$(function () {
index.init();
}); var index = function () {
setMaxDigits(129);
//第一个参数为加密指数、第二个参数为解密参数、第三个参数为加密系数
var key_to_encode = new RSAKeyPair("010001", "", "A12A08F50D3B15E2BA7658C49A6CD068E3BB8AB439B8E5D125904F5C954AD7553CE712046182D299E3831516A2477578D86BA9D0C5C70D78FFCACCFD040C430A7B53729D517139B893DB7B228759D44BE5A3A5AE870287A2B5F165EE698EEAB9FEF345F82D27D789F0E5F79490AB324A4EDEE11A76A38FCB6E05F64335D2A60D");
var _initEvent = function () {
$("#submit").click(function () {
submitData();
});
} function submitData() {
var userName = $("#userName").val();
var pwd = $("#pwd").val();
pwd = encryptedString(key_to_encode, pwd)
$.ajax({
url: "/Home/Login",
data: {
"userName": userName,
"pwd": pwd
},
datatype: "json",
type: "get",
success: function (json) {
$("#result").html("登录结果:" + json.result + "<br/>前端传入密码:" + json.InPwd + "<br/>后端解密后:" + json.OutPwd);
}
});
} return {
init: function () {
_initEvent();
}
}
}(); </script>
</head>
<body>
用户名:<input type="text" id="userName" value="张三" /><br /><br />
密 码:<input type="text" id="pwd" value="12345677" /><br /><br />
<input type="button" id="submit" value="提交" />
<p id="result"></p>
</body>
</html>
后端登录处理和解密代码
public ActionResult Login(string userName, string pwd)
{
string outPwd = RSADecrypts.RSADecrypt(pwd);
if (outPwd == "" && userName == "张三")
{
return Json(new { result = "登录成功", InPwd = pwd, OutPwd = outPwd }, JsonRequestBehavior.AllowGet);
}
else
{
return Json(new { result = "用户名或密码不对", InPwd = pwd, OutPwd = outPwd }, JsonRequestBehavior.AllowGet);
} } public static string RSADecrypt(string pToDecrypt)
{
string privateKey = "<RSAKeyValue><Modulus>oSoI9Q07FeK6dljEmmzQaOO7irQ5uOXRJZBPXJVK11U85xIEYYLSmeODFRaiR3V42Gup0MXHDXj/ysz9BAxDCntTcp1RcTm4k9t7IodZ1Evlo6WuhwKHorXxZe5pjuq5/vNF+C0n14nw5feUkKsySk7e4Rp2o4/LbgX2QzXSpg0=</Modulus><Exponent>AQAB</Exponent><P>0nRJAznZ9iAUkCkW//b9sQ5KquqRqqTe8/jp2ZAkCXuGz7WNCMQsSX/doJY0Dfum5MDeq0Y4ShB/LRSWhrKSrw==</P><Q>xArz6MLHAHOY7z76pA5o10mERKp7z4yhm/wFa9ghgy3Q3bQAfotRsLbT16ELmXqFi1Wo0Z2CprtZpVMsaGdyAw==</Q><DP>n0/t8WY6zCmOx26DfbKwavbBqU62hHIYYKG+DLcjwJXlAJmTsN4oFF+aGzV5JFirByHFrewTMmX4j9y08jR9+w==</DP><DQ>XDg+xrahgE/gmGLK6tOwc92sb9S2y0p/V241aqbQFPI/d5tORDjrY7KNcrjaSQd+vK297WUn6aDmKcQ3dqF62w==</DQ><InverseQ>N1WISfI5sfIovGeRCpTjz0kGfCuqURyjU+MxCD+xmCCgDcNKmSiDaUzKprnoCZbFd5IvSYGFSpPSdtpQ3qcVRw==</InverseQ><D>HgwCuIE7e1SWk/rvyKSx5GRU8kKwok7ChADYMvgoiGX9YU1EINPtpMA8j6F1JuJ5YcwM0H4XIuVktzApmegZVV6oS8xgdiWWixYufc8MThyP5FEBBd4LxPkVDSBsO3v8mdsWAZIi+Gup+SCnyrNqDp2a984/dfwyxWPj1PmacYc=</D></RSAKeyValue>";
CspParameters cspParameters = new CspParameters();
cspParameters.KeyContainerName = "containerName";
cspParameters.KeyNumber = ;
cspParameters.Flags = CspProviderFlags.UseMachineKeyStore; using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspParameters))
{
rsa.FromXmlString(privateKey);
byte[] result = rsa.Decrypt(HexStringToBytes(pToDecrypt), false);
System.Text.ASCIIEncoding enc = new ASCIIEncoding();
return enc.GetString(result);
}
} private static byte[] HexStringToBytes(string hex)
{
if (hex.Length == )
{
return new byte[] { };
} if (hex.Length % == )
{
hex = "" + hex;
} byte[] result = new byte[hex.Length / ]; for (int i = ; i < hex.Length / ; i++)
{
result[i] = byte.Parse(hex.Substring( * i, ), System.Globalization.NumberStyles.AllowHexSpecifier);
} return result;
}
生成公钥私钥代码
private static string BytesToHexString(byte[] input)
{
StringBuilder hexString = new StringBuilder(); for (int i = ; i < input.Length; i++)
{
hexString.Append(String.Format("{0:X2}", input[i]));
}
return hexString.ToString();
} public static void CreateKey(out string publicKey, out string privateKey)
{ RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();
RSAParameters parameter = rsaProvider.ExportParameters(false);
publicKey = BytesToHexString(parameter.Exponent) + "," + BytesToHexString(parameter.Modulus);
// publicKeyXML = rsa.ToXmlString(true);
privateKey = rsaProvider.ToXmlString(true);
}
}
注:RSA只是非对称加密算法的一种,在非对称加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等,对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等
附Demo地址:http://download.csdn.net/detail/fcydxbd/9724553
参考地址:http://blog.csdn.net/dslinmy/article/details/37362661
RSA非对称性前端加密后端解密的更多相关文章
- C#使用RSA证书文件加密和解密示例
修改MSDN上的示例,使之可以通过RSA证书文件加密和解密,中间遇到一个小问题. Q:执行ExportParameters()方法时,回报CryptographicException:该项不适于在指定 ...
- jsencrypt参数前端加密c#解密
写程序时一般是通过form表单或者ajax方式将参数提交到服务器进行验证,如何防止提交的请求不被抓包后串改,虽然无法说绝对安全却给非法提交提高了难度,本篇采用jsencypt在前端进行加密的并且用C# ...
- RSA算法 JS加密 JAVA解密
有这样一个需求,前端登录的usernamepassword,password必需加密.但不可使用MD5,由于后台要检測password的复杂度,那么在保证安全的前提下将password传到后台呢,答案 ...
- RSA加密算法的加密与解密
转发原文链接:RSA加密算法加密与解密过程解析 1.加密算法概述 加密算法根据内容是否可以还原分为可逆加密和非可逆加密. 可逆加密根据其加密解密是否使用的同一个密钥而可以分为对称加密和非对称加密. 所 ...
- 使用PHP实现RSA算法的加密和解密
本文提供使用RSA算法加密解密数据的PHP程序类(签名和验签的实现方式可以查看使用PHP实现RSA算法的签名和验签 这篇文章),封装了格式化公钥和私钥文件的方法,这样无论使用什么格式的公钥或者私钥都可 ...
- RSA生成、加密、解密、签名。
首先,要会生成RSA密码对. https://app.alipay.com/market/document.htm?name=saomazhifu#page-23 (事例中的密钥对好像有问题,最 ...
- C#使用RSA证书文件加密和解密
public class EncrypHelp { static public byte[] RSAEncrypt(byte[] DataToEncrypt, RSAParameters RSAKey ...
- JAVA WEB实现前端加密后台解密
最近在研究登陆密码的加密,下边上具体代码,只是给出核心代码,具体的代码视业务而定吧,给位有什么问题或者意见请留言. 加密方法用的是AES-128-CBC,BASE64用的是org.apache.com ...
- 转发:RSA实现JS前端加密,PHP后端解密
web前端,用户注册与登录,不能直接以明文形式提交用户密码,容易被截获,这时就引入RSA. 前端加密 需引入4个JS扩展文件,jsbn.js.prng4.js.rng.js和rsa.js. <h ...
随机推荐
- RabbitMQ操作
注意:在rabbitmq中,可以存在多个exchange,exchange只是负责接收消息,然后消息必须发送到给queue中,如果没有queue,消息就丢失了,exchange就相当于交换机,不负责存 ...
- What's Security
研究安全应该时常问自己这个问题,什么是安全,什么是安全,什么是安全,安全的本质是什么,只有理解了安全的本质,才能成功的设计一个安全方案. 现在的感觉是没有绝对的安全,所谓的'安全'其实都只不过是增加攻 ...
- 给织梦添加英文栏目标题在chanel标签中调用
网上很多添加英文栏目标题的方法,大家自己去百度一下就好,但是修改之后在chanel标签中是调用不了的,那么解决办法如下: 想要在channel 中使用,例如: {dede:channel type=' ...
- CSS Icon 项目地址 小图标-用css写成的
http://cssicon.space/#/icon/focus 这是所有用css写成的 小图标 右侧有 html和css代码
- 修改.net mvc中前端验证信息的显示方式
最近一直在学习.net core的用法.想法是通过写一个新闻系统来熟悉一下这个最新的技术.其实,我以前一直对.net技术都是浅尝辄止,最主要原因是没有动力.平时写企业站因为时间原因,不是使用php的框 ...
- JAVA实现带图片的列表——JList
JList:显示对象列表并且允许用户选择一个或多个项的组件. JList的构造方法: 1.根据数组创建列表: JList(Object[] listData) 构造一个 JList,使其显示指定数组中 ...
- java面向对象---对象容器
泛型类--ArrayList<>; 2.对象数组中的每个元素都是对象的管理者而并非对象本身!!!!! 3.java类的基本数据类型 基本数据类型 包装类 byte Byte short S ...
- [UWP] 使用SemanticZoom控件
在写一个看新闻软件的时候,用到了SemanticZoom控件,遇到了一些问题,比如如何根据首字母分类,以及放大视图中有数据的和没数据的通过背景色或前景色区分,幸运的是,all solved. 先来个效 ...
- Mysql多表表关联查询 inner Join left join right join
Mysql多表表关联查询 inner Join left join right join
- SNMP协议以及著名的MIB详解
SNMP协议介绍 简单网络管理协议(SNMP:Simple Network Management Protocol)是由互联网工程任务组(IETF:Internet Engineering Task ...