Url傳參數並加解密

  • 22245
  • 0

Url傳參數並加解密

剛好最近稍微清閒一點,想試試加解密的用法,

所以這篇主要是簡單示範一下基本傳參數加解密的方式。

 

由於小弟Coding經驗還不夠,能力還差很多技術前輩一大截,因此沒辦法自己寫出加解密,

只好上網GOOGLE一下一般加解密的方式,

主要是參考這篇文章稍做改變

http://www.code-club.idv.tw/index.php?action=index&run=article_read&ClassID=60&ArticleID=1609

 

先講一下URL傳參數的部分,我想這部分應該很多人都會,

只要在網址後面加個?(問號)加上(參數名稱)=(參數值),若有多個參數,則用&串接

範例:

http://localhost:46303/postback.aspx?ID=A0001&Name=Andy

在.cs裡面


string strParameter = string.Format("postback.aspx?ID={0}&Name={1}","A0001","Andy"); 
Response.Redirect(strParameter);

這樣就可以達到傳參數到下一個頁面的功能了

 

 

接著加上加解密功能

 

首先要在該頁面匯入namespace  (此處為default.aspx.cs)

using System.Security.Cryptography;

 

接著撰寫產生金鑰的程式碼


        {
            if (!IsPostBack)
            {
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                //產生金鑰並轉成字串
                Key = ASCIIEncoding.ASCII.GetString(des.Key);
                IV = ASCIIEncoding.ASCII.GetString(des.Key);
            }
        }

再來是加密功能


/// <summary>
/// 加密
/// </summary>
/// <param name="EnString">欲加密的字串</param>
/// <returns></returns>
public string EnCode(string EnString)  
{
         
        byte[] b = Encoding.UTF8.GetBytes(EnString);
        DESCryptoServiceProvider des = new DESCryptoServiceProvider();
        ICryptoTransform ict = des.CreateEncryptor(ASCIIEncoding.ASCII.GetBytes(Key),ASCIIEncoding.ASCII.GetBytes(IV));
        byte[] outData = ict.TransformFinalBlock(b, 0, b.Length);
        //回傳加密後的字串
        return Convert.ToBase64String(outData); 
}

然後導頁傳參數的部分加密

        protected void Button1_Click(object sender, EventArgs e)
        {    
            //設定導頁並帶入參數
            string strParameter = string.Format("postback.aspx?ID={0}&Name={1}", EnCode("A0001"), EnCode("Andy"));
            Response.Redirect(strParameter);
        }

image

可以看到參數值已經變成亂碼

 

 

再來是解密的部分,由於是導到下一個頁面,因此解密的部分在下一頁處理。(此處是postback.aspx.cs)

解密功能

 //將字串解密
        public string DeCode(string DeString) 
        {

            byte[] b = Convert.FromBase64String(DeString);
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            ICryptoTransform ict = des.CreateDecryptor(ASCIIEncoding.ASCII.GetBytes(Key), ASCIIEncoding.ASCII.GetBytes(IV));
            byte[] outData = ict.TransformFinalBlock(b, 0, b.Length);
            //回傳解密後的字串
            return Encoding.UTF8.GetString(outData);
        }

 

執行解密

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                string id =  DeCode(Request.QueryString["ID"].ToString());
                string name = DeCode(Request.QueryString["Name"].ToString());
                Label1.Text = "你的ID是" + id + " NAME是 " + name;
            }
        }

 

結果

image

 

不過小弟對於加解密方面的know how了解不深,不清楚此加解密方式是否真的安全

這方面有勞各位前輩指導了。

 

 

若有錯誤的地方也歡迎指證,感謝。