源码下载地址:js前台加密传输到后台c#解密
前提条件:
1、添加3个js,在代码crypto文件夹中
2、添加4个类文件,在代码App_Code\Migrated文件夹中
3、两个加密解密文件,在代码MyXml文件夹中
前台代码:
-
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="LoginNew.aspx.cs" Inherits="LoginNew" %>
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
<html xmlns="http://www.w3.org/1999/xhtml">
-
<head runat="server">
-
<title>Untitled Page</title>
-
<script language="javascript" src="crypto/BigInt.js"></script>
-
<script language="javascript" src="crypto/Barrett.js"></script>
-
<script language="javascript" src="crypto/RSA.js"></script>
-
<script language="javascript">
-
function cmdEncrypt()
-
{
-
setMaxDigits(131);
-
//这句话在我的代码里面放在这里head之间会报错,把cmdEncrypt()方法移到body上执行不会报错
-
var key = new RSAKeyPair("<%=GetRSA_E()%>", "", "<%=GetRSA_M()%>");
-
document.getElementById("posx").value = encryptedString(key,base64encode(document.getElementById("txtUserName").value) + "\\" + base64encode(document.getElementById("txtPassword").value));
-
document.getElementById("txtPassword").value="";
-
return;
-
}
-
function base64encode(str) {
-
var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
var base64DecodeChars = new Array(
-
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
-
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
-
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
-
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
-
-1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
-
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
-
var out, i, len;
-
var c1, c2, c3;
-
len = str.length;
-
i = 0;
-
out = "";
-
while(i < len) {
-
c1 = str.charCodeAt(i++) & 0xff;
-
if(i == len)
-
{
-
out += base64EncodeChars.charAt(c1 >> 2);
-
out += base64EncodeChars.charAt((c1 & 0x3) << 4);
-
out += "==";
-
break;
-
}
-
c2 = str.charCodeAt(i++);
-
if(i == len)
-
{
-
out += base64EncodeChars.charAt(c1 >> 2);
-
out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
-
out += base64EncodeChars.charAt((c2 & 0xF) << 2);
-
out += "=";
-
break;
-
}
-
c3 = str.charCodeAt(i++);
-
out += base64EncodeChars.charAt(c1 >> 2);
-
out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
-
out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
-
out += base64EncodeChars.charAt(c3 & 0x3F);
-
}
-
return out;
-
}
-
</script>
-
</head>
-
<body>
-
<form id="Form1" method="post" runat="server">
-
<table width="100%" border="0" cellpadding="0" cellspacing="0">
-
<tr>
-
<td align="right" height="28" nowrap>
-
</td>
-
</tr>
-
</table>
-
<table width="100%" border="0" cellpadding="3" cellspacing="0" style="background-color: white">
-
<tr>
-
<td>
-
<span>Log On to APPa</span>
-
<br>
-
<hr size="1">
-
</td>
-
</tr>
-
</table>
-
<table width="100%" cellpadding="3" cellspacing="0" border="0">
-
<tr>
-
<td>
-
<br>
-
Please enter your user name and password:<br>
-
<hr size="1">
-
</td>
-
</tr>
-
<tr>
-
<td>
-
<table border="0" cellpadding="0" cellspacing="1">
-
<tr>
-
<td>
-
User Name:</td>
-
<td width="20">
-
</td>
-
<td>
-
<asp:TextBox EnableViewState="False" MaxLength="30" ID="txtUserName" runat="server"
-
Width="200px"></asp:TextBox></td>
-
<td>
-
</td>
-
</tr>
-
<tr>
-
<td>
-
Password:</td>
-
<td width="20">
-
</td>
-
<td>
-
<asp:TextBox EnableViewState="False" MaxLength="30" ID="txtPassword" runat="server"
-
TextMode="Password" Width="200px"></asp:TextBox></td>
-
<td>
-
</td>
-
</tr>
-
<tr>
-
<td colspan="2">
-
<td align="left">
-
<table cellpadding="0" border="0">
-
<tr>
-
<td class="">
-
<div class="">
-
<input type="button" id="btnLogin" runat="Server" value="Login" οnclick="javascript:cmdEncrypt();"
-
name="btnLogin" onserverclick="btnLogin_ServerClick">
-
</div>
-
</td>
-
</tr>
-
</table>
-
</td>
-
<td>
-
</td>
-
<td>
-
</tr>
-
</table>
-
<asp:Label ID="lblMsg" EnableViewState="False" runat="server"></asp:Label><br>
-
<asp:Label ID="lblError" EnableViewState="False" runat="server" ForeColor="red"></asp:Label><br>
-
<asp:HiddenField ID="posx" runat="server" />
-
</td>
-
</tr>
-
</table>
-
</form>
-
</body>
-
</html>
后台代码:
-
using System;
-
using System.Data;
-
using System.Configuration;
-
using System.Collections;
-
using System.Web;
-
using System.Web.Security;
-
using System.Web.UI;
-
using System.Web.UI.WebControls;
-
using System.Web.UI.WebControls.WebParts;
-
using System.Web.UI.HtmlControls;
-
using System.Security.Cryptography;
-
using System.IO;
-
using CodeName.APPa;
-
public partial class LoginNew : System.Web.UI.Page
-
{
-
private RSACrypto rsa = new RSACrypto();
-
private RSAParameters param;
-
protected void Page_Load(object sender, System.EventArgs e)
-
{
-
if (!IsPostBack)
-
{
-
GetKey.GetKeyFunction();
-
}
-
string path = Session["key"].ToString() + ConfigurationManager.AppSettings["rsaPrivateKeyFilePath"];
-
rsa.InitCrypto(Server.MapPath("~/MyXml/") + path);
-
param = rsa.ExportParameters(true);
-
}
-
protected string GetRSA_E()
-
{
-
return StringHelper.BytesToHexString(param.Exponent);
-
}
-
protected string GetRSA_M()
-
{
-
return StringHelper.BytesToHexString(param.Modulus);
-
}
-
protected void btnLogin_ServerClick(object sender, System.EventArgs e)
-
{
-
string tmp = StringHelper.ASCIIBytesToString(rsa.Decrypt(StringHelper.HexStringToBytes(Request.Params["posx"])));
-
string[] parts = tmp.Split('\\');
-
string username = StringHelper.ASCIIBytesToString(StringHelper.FromBase64(parts[0]));
-
string password = StringHelper.ASCIIBytesToString(StringHelper.FromBase64(parts[1]));
-
}
-
}
webconfig配置文件:在appSettings节点中加入这3句话
<appSettings>
<add key="authDomainServer" value="SERVERa"/>
<add key="rsaPublicKeyFilePath" value="private.xml"/>
<add key="rsaPrivateKeyFilePath" value="private.xml"/>
</appSettings>