C# url傳參數並加解密

這篇是以前寫的文章,順便轉過來這邊
主要是參考這篇文章稍做改變

先講一下URL傳參數的部分,我想這部分應該很多人都會,
只要在網址後面加個?(問號)加上(參數名稱)=(參數值),若有多個參數,則用&串接
範例:
在.cs裡面
1//設定導頁並帶入參數
2string strParameter = string.Format("postback.aspx?ID={0}&Name={1}","A0001","Andy");
3Response.Redirect(strParameter);
這樣就可以達到傳參數到下一個頁面的功能了


接著加上加解密功能

首先要在該頁面匯入namespace  (此處為default.aspx.cs)
using System.Security.Cryptography;

接著撰寫產生金鑰的程式碼
01protected void Page_Load(object sender, EventArgs e)
02        {
03            if (!IsPostBack)
04            {
05                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
06                //產生金鑰並轉成字串
07                Key = ASCIIEncoding.ASCII.GetString(des.Key);
08                IV = ASCIIEncoding.ASCII.GetString(des.Key);
09            }
10        }
再來是加密功能
01/// <summary>
02/// 加密
03/// </summary>
04/// <param name="EnString">欲加密的字串</param>
05/// <returns></returns>
06public string EnCode(string EnString) 
07{
08          
09        byte[] b = Encoding.UTF8.GetBytes(EnString);
10        DESCryptoServiceProvider des = new DESCryptoServiceProvider();
11        ICryptoTransform ict = des.CreateEncryptor(ASCIIEncoding.ASCII.GetBytes(Key),ASCIIEncoding.ASCII.GetBytes(IV));
12        byte[] outData = ict.TransformFinalBlock(b, 0, b.Length);
13        //回傳加密後的字串
14        return Convert.ToBase64String(outData);
15}
然後導頁傳參數的部分加密
1protected void Button1_Click(object sender, EventArgs e)
2{   
3    //設定導頁並帶入參數
4    string strParameter = string.Format("postback.aspx?ID={0}&Name={1}", EnCode("A0001"), EnCode("Andy"));
5    Response.Redirect(strParameter);
6}
image
可以看到參數值已經變成亂碼


再來是解密的部分,由於是導到下一個頁面,因此解密的部分在下一頁處理。(此處是postback.aspx.cs)
解密功能
01//將字串解密
02       public string DeCode(string DeString)
03       {
04 
05           byte[] b = Convert.FromBase64String(DeString);
06           DESCryptoServiceProvider des = new DESCryptoServiceProvider();
07           ICryptoTransform ict = des.CreateDecryptor(ASCIIEncoding.ASCII.GetBytes(Key), ASCIIEncoding.ASCII.GetBytes(IV));
08           byte[] outData = ict.TransformFinalBlock(b, 0, b.Length);
09           //回傳解密後的字串
10           return Encoding.UTF8.GetString(outData);
11       }

執行解密
1protected void Page_Load(object sender, EventArgs e)
2{
3    if (!IsPostBack)
4    {
5        string id =  DeCode(Request.QueryString["ID"].ToString());
6        string name = DeCode(Request.QueryString["Name"].ToString());
7        Label1.Text = "你的ID是" + id + " NAME是 " + name;
8    }
9}

結果
image

不過小弟對於加解密方面的know how了解不深,不清楚此加解密方式是否真的安全
這方面有勞各位前輩指導了。



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

留言