日期:2014-05-19  浏览次数:20535 次

页面跳转的参数是怎么加密?
页面跳转的参数是怎么加密,解密?

------解决方案--------------------
Byte[] Iv64={11, 22, 33, 44, 55, 66, 77, 85};
Byte[] byKey64={10, 20, 30, 40, 50, 60, 70, 80};
public string Encrypt(string strText)
{
try
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//System.Security.Cryptography.DESCryptoServiceProvider
//定义访问数据加密标准 (DES) 算法的加密服务提供程序 (CSP) 版本的包装对象。无法继承此类。
Byte[] inputByteArray = Encoding.UTF8.GetBytes(strText);
//System.Text.Encoding 表示字符编码
//Encoding.UTF8 属性 获取 UTF-8 格式的编码
//GetBytes 将指定的 String 或字符数组的全部或部分内容编码为字节数组
MemoryStream ms = new MemoryStream();
//System.IO.MemoryStream 创建以内存作为其支持存储区的流
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(byKey64, Iv64), CryptoStreamMode.Write);
//System.Security.Cryptography.CryptoStream 定义将数据流链接到加密转换的流
//public CryptoStream(Stream stream,ICryptoTransform transform,CryptoStreamMode mode)
//参数
//stream
//对其执行加密转换的流。
//transform
//要对流执行的加密转换。
//mode
//CryptoStreamMode 值之一
//DESCryptoServiceProvider.CreateEncryptor方法 创建对称数据加密标准 (DES) 加密器对象
//用指定的 Key 和初始化向量 (IV) 创建对称数据加密标准 (DES) 加密器对象
cs.Write(inputByteArray, 0, inputByteArray.Length);
//CryptoStream.Write 方法 将一个字节序列写入当前 CryptoStream,并将流中的当前位置提升写入的字节数
//public override void Write(
//byte[] buffer,
//int offset,
//int count
//);
//参数
//buffer
//字节数组。此方法将 count 个字节从 buffer 复制到当前流。
//offset
//buffer 中的字节偏移量,从此偏移量开始将字节复制到当前流。
//count
//要写入当前流的字节数。
cs.FlushFinalBlock();
//CryptoStream.FlushFinalBlock 方法 用缓冲区的当前状态更新基础数据源或储存库,随后清除缓冲区。
return Convert.ToBase64String(ms.ToArray());
//Convert.ToBase64String 方法 将 8 位无符号整数数组的值转换为它的等效 String 表示形式(由以 64 为基的数字组成)。
}
catch(Exception ex)
{
return ex.Message;
}
}

private void btnLogin_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
DateTime nowTime = DateTime.Now;
string postUser = txtUser.Text.ToString();
string postPass = txtPassword.Text.ToString();
Response.Redirect( "Login.aspx?clubID= "+Encrypt(postUser+ ", "+postPass+ ", "+nowTime.ToString()));
}
------解决方案--------------------
上是加密,下面是解密
//随机选8个字节既为密钥也为初始向量
Byte[] byKey64={10, 20, 30, 40, 50, 60, 70, 80};
Byte[] Iv64={11, 22, 33, 44, 55, 66, 77, 85};

public string Decrypt(string strText)
{
Byte[] inputByteArray = new byte[strText.Length];
try
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
inputByteArray = Convert.FromBase64String(strText);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byKey64, Iv64), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
System.Text.Encoding encoding = System.Text.Encoding.UTF8;
return encoding.GetString(ms.ToArray());
}
catch(Exception ex)
{
return ex.Message;
}
}


private void Page_Load(object sender, System.EventArgs e)
{
if(Request.Params[ "clubID "]!=null)
{
string originalValue = Request.Params[ "clubID "];
originalValue = originalValue.Replace( " ", "+ ");
//+号通过url传递变成了空格。
string decryptResult = Decrypt(originalValue);
//DecryptString(string)解密字符串
string delimStr = ", ";
char[] delimiterArray = delimStr.ToCharArray();
//String.ToCharArray 方法 将此实例中的字符复制到 Unicode 字符数组
str