| 導購 | 订阅 | 在线投稿
分享
 
 
 

WEB系統中加密解密URL傳輸參數

來源:互聯網  2008-05-19 04:14:45  評論

網上很多人在問怎麽實現Web系統URL傳輸(表單提交)參數加密。例如:要進行一個用戶帳號編輯,要傳遞用戶的ID,URL如下:http://localhost/mysystem/editAccounts.aspx?ID=2

但又不想讓別人知道這個用戶的ID爲2,惡意的使用者可能還會將2修改,改爲別的用戶ID。

加密傳遞的參數值可以解決問題。

以下是自己寫的DEC加密、解密的基類。

文件名:Security.CS

using System;

using System.Security.Cryptography;

using System.IO;

using System.Text;

namespace EIP.Framework

{

///

/// Security 的摘要說明。

/// Security類實現.NET框架下的加密和解密。

/// CopyRight KangSoft@Hotmail.com@Hotmail.com@hotmail.com

///

public class Security

{

string _QueryStringKey = "abcdefgh"; //URL傳輸參數加密Key

string _PassWordKey = "hgfedcba";

//PassWord加密Key

public Security()

{

//

// TODO: 在此處添加構造函數邏輯

//

}

///

/// 加密URL傳輸的字符串

///

public string EncryptQueryString(string QueryString)

{

return Encrypt(QueryString,_QueryStringKey);

}

///

/// 解密URL傳輸的字符串

///

public string DecryptQueryString(string QueryString)

{

return Decrypt(QueryString,_QueryStringKey);

}

///

/// 加密帳號口令

///

public string EncryptPassWord(string PassWord)

{

return Encrypt(PassWord,_PassWordKey);

}

///

/// 解密帳號口令

///

public string DecryptPassWord(string PassWord)

{

return Decrypt(PassWord,_PassWordKey);

}

///

/// DEC 加密過程

///

public string Encrypt(string pToEncrypt,string sKey)

{

DESCryptoServiceProvider des = new DESCryptoServiceProvider();

//把字符串放到byte數組中

byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);

//byte[]

inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);

des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);

//建立加密對象的密鑰和偏移量

des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

//原文使用ASCIIEncoding.ASCII方法的GetBytes方法

MemoryStream ms = new MemoryStream();

//使得輸入密碼必須輸入英文文本

CryptoStream cs = new CryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write);

cs.Write(inputByteArray, 0, inputByteArray.Length);

cs.FlushFinalBlock();

StringBuilder ret = new

StringBuilder();

foreach(byte b in ms.ToArray())

{

ret.AppendFormat("{0:X2}", b);

}

ret.ToString();

return

ret.ToString();

}

///

/// DEC 解密過程

///

public string Decrypt(string pToDecrypt, string sKey)

{

DESCryptoServiceProvider des = new DESCryptoServiceProvider();

byte[] inputByteArray = new byte[pToDecrypt.Length / 2];

for(int x = 0; x

{

int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));

inputByteArray[x]

=

(byte)i;

}

des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);

//建立加密對象的密鑰和偏移量,此值重要,不能修改

des.IV

= ASCIIEncoding.ASCII.GetBytes(sKey);

MemoryStream ms = new MemoryStream();

CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write);

cs.Write(inputByteArray, 0, inputByteArray.Length);

cs.FlushFinalBlock();

StringBuilder ret = new StringBuilder();

//建立StringBuild對象,CreateDecrypt使用的是流對象,必須把解密後的文本變成流對象

return System.Text.Encoding.Default.GetString(ms.ToArray());

}

///

/// 檢查己加密的字符串是否與原文相同

///

public bool ValidateString(string EnString, string FoString, int Mode)

{

switch (Mode)

{

default:

case 1:

if (Decrypt(EnString,_QueryStringKey) == FoString.ToString())

{

return true;

}

else

{

return false;

}

case 2:

if (Decrypt(EnString,_PassWordKey) == FoString.ToString())

{

return true;

}

else

{

return false;

}

}

}

}

}

類中URL及帳號加密使用了不同的KEY。調用URL加密過程如下:

EIP.Framework.Security objSecurity = new EIP.Framework.Security();

objSecurity.EncryptQueryString(''待加密的字符串'');

解密:objSecurity.DecryptQueryString(''傳遞過來的參數);

  網上很多人在問怎麽實現Web系統URL傳輸(表單提交)參數加密。例如:要進行一個用戶帳號編輯,要傳遞用戶的ID,URL如下:http://localhost/mysystem/editAccounts.aspx?ID=2   但又不想讓別人知道這個用戶的ID爲2,惡意的使用者可能還會將2修改,改爲別的用戶ID。   加密傳遞的參數值可以解決問題。   以下是自己寫的DEC加密、解密的基類。   文件名:Security.CS   using System;   using System.Security.Cryptography;   using System.IO;   using System.Text;   namespace EIP.Framework   {   ///   /// Security 的摘要說明。   /// Security類實現.NET框架下的加密和解密。   /// CopyRight KangSoft@Hotmail.com@Hotmail.com@hotmail.com   ///   public class Security   {   string _QueryStringKey = "abcdefgh"; //URL傳輸參數加密Key   string _PassWordKey = "hgfedcba";   //PassWord加密Key   public Security()   {   //   // TODO: 在此處添加構造函數邏輯   //   }   ///   /// 加密URL傳輸的字符串   ///   public string EncryptQueryString(string QueryString)   {   return Encrypt(QueryString,_QueryStringKey);   }   ///   /// 解密URL傳輸的字符串   ///   public string DecryptQueryString(string QueryString)   {   return Decrypt(QueryString,_QueryStringKey);   }   ///   /// 加密帳號口令   ///   public string EncryptPassWord(string PassWord)   {   return Encrypt(PassWord,_PassWordKey);   }   ///   /// 解密帳號口令   ///   public string DecryptPassWord(string PassWord)   {   return Decrypt(PassWord,_PassWordKey);   }   ///   /// DEC 加密過程   ///   public string Encrypt(string pToEncrypt,string sKey)   {   DESCryptoServiceProvider des = new DESCryptoServiceProvider();   //把字符串放到byte數組中   byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);   //byte[]   inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);   des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);   //建立加密對象的密鑰和偏移量   des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);   //原文使用ASCIIEncoding.ASCII方法的GetBytes方法   MemoryStream ms = new MemoryStream();   //使得輸入密碼必須輸入英文文本   CryptoStream cs = new CryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write);   cs.Write(inputByteArray, 0, inputByteArray.Length);   cs.FlushFinalBlock();   StringBuilder ret = new   StringBuilder();   foreach(byte b in ms.ToArray())   {   ret.AppendFormat("{0:X2}", b);   }   ret.ToString();   return   ret.ToString();   }   ///   /// DEC 解密過程   ///   public string Decrypt(string pToDecrypt, string sKey)   {   DESCryptoServiceProvider des = new DESCryptoServiceProvider();   byte[] inputByteArray = new byte[pToDecrypt.Length / 2];   for(int x = 0; x   {   int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));   inputByteArray[x]   =   (byte)i;   }   des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);   //建立加密對象的密鑰和偏移量,此值重要,不能修改   des.IV   = ASCIIEncoding.ASCII.GetBytes(sKey);   MemoryStream ms = new MemoryStream();   CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write);   cs.Write(inputByteArray, 0, inputByteArray.Length);   cs.FlushFinalBlock();   StringBuilder ret = new StringBuilder();   //建立StringBuild對象,CreateDecrypt使用的是流對象,必須把解密後的文本變成流對象   return System.Text.Encoding.Default.GetString(ms.ToArray());   }   ///   /// 檢查己加密的字符串是否與原文相同   ///   public bool ValidateString(string EnString, string FoString, int Mode)   {   switch (Mode)   {   default:   case 1:   if (Decrypt(EnString,_QueryStringKey) == FoString.ToString())   {   return true;   }   else   {   return false;   }   case 2:   if (Decrypt(EnString,_PassWordKey) == FoString.ToString())   {   return true;   }   else   {   return false;   }   }   }   }   }   類中URL及帳號加密使用了不同的KEY。調用URL加密過程如下:   EIP.Framework.Security objSecurity = new EIP.Framework.Security();   objSecurity.EncryptQueryString(''待加密的字符串'');   解密:objSecurity.DecryptQueryString(''傳遞過來的參數);      
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有