2010-06-03 154 views
3

我有一個URL www.site地址/站點頁/ page1.aspx這個?用戶名=迪普&密碼=迪普 我怎樣才能將URL更改爲 www.site-網址地址/網站頁面/ page1.aspx這個?用戶名= 232322323232 &密碼= 2323232322323 即我想要加密我通過URL字段請幫我加密和使用.NET解密在C#中的URL,我現在用的響應.redirect並通過這些值作爲查詢字符串....請幫助....如何加密/解密C#

+9

呼吸....標點符號是你的朋友。 – 2010-06-03 13:16:47

+0

我也想知道。不是說我會這樣做,但「會話」究竟是如何工作的? – 2010-06-03 13:18:24

+3

如果作爲一個用戶,您可以在URL中看到您的用戶名和密碼,感覺很舒服,請舉手?甚至被認爲是「加密的?」任何人? – 2010-06-03 13:19:25

回答

5

你的方法是有缺陷的加密不會真正幫助潛在的問題。如果你穿過網絡出去,你很少(永遠也不會)看到你所描述的模式,即使它是加密的。

相反,你應該存儲用戶憑據儘可能安全的服務器上,並可以用它來查找憑證的查詢字符串傳遞一個獨特的,短暫的會話令牌。

用於安全地存儲在服務器上,一旦你收到用戶的密碼是第一次,你應該使用一個單向散列,像SHA256,與鹽。你可以在任何地方傳遞這個值,存儲它並驗證,比較你存儲的哈希值是否有潛在的密碼。像使用有毒廢物一樣處理用戶的密碼 - 儘快將其扔掉。您希望在密碼存儲業務方面與您想要進行有毒廢物存儲業務一樣糟糕。

(從我的iPhone回答,鏈接或即將出臺,如果有人願意幫助我!:))

+0

謝謝你回答,,,我需要將一些數據傳遞給另一個頁面..如果我通過url傳遞,我不希望客戶端看到字段值..任何加密的形式都是可能的..我並不是說我想要這種形式... – deepu 2010-06-03 13:26:34

+1

@deepu答案是「不要那樣做」。這是非常危險的。 – 2010-06-03 13:29:58

+0

okz..then如何將一些值傳遞給另一個頁面...除了server.transfer方法.. – deepu 2010-06-03 13:36:10

4

你真的想這樣做嗎?如果您打算使用用戶名和密碼,推測可能會對您提供的信息或功能有所幫助。隨着URL參數傳遞,你留個號碼的攻擊面敞開(未至少重播攻擊,任何人都可以冒充你的用戶。

什麼是你真正想要做的,爲什麼你不能使用what's provided in ASP.NET

+0

我同意。將憑證存儲在查詢字符串中是非常糟糕的形式,即使它是加密的。對於截取查詢字符串並冒充用戶來說很容易。 – 2010-06-03 13:30:59

+0

嗯......我需要傳遞一些數據到另一個頁面..如果我通過網址傳遞,我不希望客戶端看到提交的值..thatz所有我認爲abt加密值和傳遞是可能的。 ..有一個簡單的方法... – deepu 2010-06-03 13:32:39

+1

你不必一起傳遞用戶名/密碼!聽說會議?如果你只是看看MSFT推薦的內容,這會自動處理。請看看標準的ASP.NET身份驗證機制,我敦促你! – 2010-06-03 14:23:04

1

爲什麼不發佈值而不是使用查詢字符串?使用SSL至少沒有人會看到密碼被加密或以其他方式。URL中的其他密碼不提供任何安全性。附近,希望沒有人會嘗試他們打開你的房子。

基本上它是一個有缺陷的前提。網址是多方面緩存,因此它是有道理的,不要把passwo在他們的rds。

然而,你不是一個人在把密碼的URL。檢查了這一點

http://support.microsoft.com/kb/135975

+0

是的,當你必須從一個頁面發送密碼到另一個頁面時,你應該使用post方法,當你在基於查詢字符串的頁面中使用一些值時,可以使用它。 – 2014-05-02 06:46:12

7

它不會在你所希望的方式工作,但肯定的加密是可能的,通過下文提到的方式

加密頁面:

string id1 = "id1"; 

Response.Redirect("decryptionPage.aspx?id1=" + HttpUtility.UrlEncode(Encrypt(id1))); 

private string Encrypt(string stringToEncrypt) 
{ 
     byte[] inputByteArray = Encoding.UTF8.GetBytes(stringToEncrypt); 
     byte[] rgbIV = { 0x21, 0x43, 0x56, 0x87, 0x10, 0xfd, 0xea, 0x1c }; 
     byte[] key = { }; 
     try 
     { 
      key = System.Text.Encoding.UTF8.GetBytes("A0D1nX0Q"); 
      DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 
      MemoryStream ms = new MemoryStream(); 
      CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(key, rgbIV), CryptoStreamMode.Write); 
      cs.Write(inputByteArray, 0, inputByteArray.Length); 
      cs.FlushFinalBlock(); 
      return Convert.ToBase64String(ms.ToArray()); 
     } 
     catch (Exception e) 
     { 
      return e.Message; 
     } 
} 

解密頁面:

string getId1 = Convert.ToString(Request.QueryString["id1"]); 
var qs = Decrypt(HttpUtility.UrlDecode(getId1)); 
private string Decrypt(string EncryptedText) 
{ 
     byte[] inputByteArray = new byte[EncryptedText.Length + 1]; 
     byte[] rgbIV = { 0x21, 0x43, 0x56, 0x87, 0x10, 0xfd, 0xea, 0x1c }; 
     byte[] key = { }; 

     try 
     { 
      key = System.Text.Encoding.UTF8.GetBytes("A0D1nX0Q"); 
      DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 
      inputByteArray = Convert.FromBase64String(EncryptedText); 
      MemoryStream ms = new MemoryStream(); 
      CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(key, rgbIV), 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 e) 
     { 
      return e.Message; 
     } 
} 
+0

我正在尋找一個類似的問題,並遇到您的代碼。它的工作原理完全正確,但「Encrypt」方法生成的字符在添加到URL時會被空格替換(例如'+')。所以,'Decrypt'方法不會像我所期望的那樣工作。任何想法來解決它? – Yalda 2013-09-22 06:34:23

+0

它工作得很好。 – Monika 2013-12-10 07:53:08