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);
}
可以看到參數值已經變成亂碼
再來是解密的部分,由於是導到下一個頁面,因此解密的部分在下一頁處理。(此處是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;
}
}
結果
不過小弟對於加解密方面的know how了解不深,不清楚此加解密方式是否真的安全
這方面有勞各位前輩指導了。
若有錯誤的地方也歡迎指證,感謝。