前端加密代码

<!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只是非对称加密算法的一种,在非对称加密中使用的主要算法有:RSAElgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等,对称加密算法中常用的算法有:DES3DES、TDEA、Blowfish、RC2、RC4、RC5IDEA、SKIPJACK、AES等

附Demo地址:http://download.csdn.net/detail/fcydxbd/9724553

参考地址:http://blog.csdn.net/dslinmy/article/details/37362661

RSA非对称性前端加密后端解密的更多相关文章

  1. C#使用RSA证书文件加密和解密示例

    修改MSDN上的示例,使之可以通过RSA证书文件加密和解密,中间遇到一个小问题. Q:执行ExportParameters()方法时,回报CryptographicException:该项不适于在指定 ...

  2. jsencrypt参数前端加密c#解密

    写程序时一般是通过form表单或者ajax方式将参数提交到服务器进行验证,如何防止提交的请求不被抓包后串改,虽然无法说绝对安全却给非法提交提高了难度,本篇采用jsencypt在前端进行加密的并且用C# ...

  3. RSA算法 JS加密 JAVA解密

    有这样一个需求,前端登录的usernamepassword,password必需加密.但不可使用MD5,由于后台要检測password的复杂度,那么在保证安全的前提下将password传到后台呢,答案 ...

  4. RSA加密算法的加密与解密

    转发原文链接:RSA加密算法加密与解密过程解析 1.加密算法概述 加密算法根据内容是否可以还原分为可逆加密和非可逆加密. 可逆加密根据其加密解密是否使用的同一个密钥而可以分为对称加密和非对称加密. 所 ...

  5. 使用PHP实现RSA算法的加密和解密

    本文提供使用RSA算法加密解密数据的PHP程序类(签名和验签的实现方式可以查看使用PHP实现RSA算法的签名和验签 这篇文章),封装了格式化公钥和私钥文件的方法,这样无论使用什么格式的公钥或者私钥都可 ...

  6. RSA生成、加密、解密、签名。

    首先,要会生成RSA密码对. https://app.alipay.com/market/document.htm?name=saomazhifu#page-23    (事例中的密钥对好像有问题,最 ...

  7. C#使用RSA证书文件加密和解密

    public class EncrypHelp { static public byte[] RSAEncrypt(byte[] DataToEncrypt, RSAParameters RSAKey ...

  8. JAVA WEB实现前端加密后台解密

    最近在研究登陆密码的加密,下边上具体代码,只是给出核心代码,具体的代码视业务而定吧,给位有什么问题或者意见请留言. 加密方法用的是AES-128-CBC,BASE64用的是org.apache.com ...

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

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

随机推荐

  1. linux命令大全

     host 命令 1,这个命令可以让您来查看主机的 ip 信息, 2,如果您还想查看 DNS 记录,可以使用 -a 参数 3,如果您需要查看域名服务器或者 SOA 信息,可以使用 -C 参数,或者您可 ...

  2. 预览github上的html页面

    譬如有个项目:https://github.com/wozhizui/ife/tree/DevTogether/task19 里面有html的示例文件index.html 我们点击进去看到的是一堆代码 ...

  3. bzoj1251

    1251: 序列终结者 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 3776  Solved: 1581[Submit][Status][Discu ...

  4. maven-过滤不打入包的文件

    在使用maven打包时,有时有些测试文件,或者配置都希望打入到架包中 此时就需要使用将不用的文件过滤,maven有很方便的过滤插件.因工作时间,暂不讨论.本次讨论一个非常简单除暴的方法,通过配置ecl ...

  5. mybatis 一对一与一对多collection和association的使用

    在mybatis如何进行一对一.一对多的多表查询呢?这里用一个简单的例子说明. 一.一对一 1.association association通常用来映射一对一的关系,例如,有个类user,对应的实体 ...

  6. windows CMD下的命令

    1.  dir 列出当前目录的内容 2.  切换目录 C:\Users\shuyun>e: ## 切换主目录 E:\>cd DataCenter ## cd 切换子目录 E:\DataCe ...

  7. 关于闭包(closure)的一些概念

    和其他大多数现代编程语言一样,JS也采用词法作用域,也就是说,函数的执行依赖于变量作用域,这个作用域是在函数定义时决定的,而不是函数调用时决定的.为了实现这种词法作用域,JS函数对象的内部状态不仅包含 ...

  8. POJ2175 Evacuation Plan

    Evacuation Plan Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4617   Accepted: 1218   ...

  9. js获取输入框中当前光标位置并在此位置插入字符串的方法(angularjs+ts)

    一半是参照别人代码,一半是自己代码,略笨拙,如果有更好的方法希望分享. 获取当前光标位置的方法 getCaretPosition (obj:any) { //获取输入框中当前光标的位置,obj为此输入 ...

  10. Généralement c'est un mélange qui me devient personnellement

    Parmi mes plus grands problèmes personnels avec maisons de rue conventionnelles est en fait ils sont ...