学习URL传输参数加密解密

最近正需要做一个login,正好看到这篇文章 http://tb.blog.csdn.net/TrackBack.aspx?PostId=566243
不是很懂,于是根据MSDN好好学习了一下,把具体的用法都标注上了

index.aspx.cs (加密处理)
Byte[] Iv64 = {1122334455667785} ;
Byte[] byKey64
= {1020304050607080} ;
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()));
}


login.aspx.cs (解密处理)
// 随机选8个字节既为密钥也为初始向量
Byte[] byKey64 = {1020304050607080} ;
Byte[] Iv64
= {1122334455667785} ;

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 字符数组
  string [] userInfoArray = null;
  userInfoArray 
= decryptResult.Split(delimiterArray);
//String.Split 方法 标识此实例中的子字符串(它们由数组中指定的一个或多个字符进行分隔),
//然后将这些子字符串放入一个 String 数组中
  string userName = userInfoArray[0];//这句好像没什么用
  User userToLogin = new User();//之前应该定义了一个实体类
  userToLogin.Username = userInfoArray[0];
  userToLogin.Password 
= userInfoArray[1];
  
 }

}
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值