C# 如何將密碼加密

C# 如何將密碼加密

密碼加密在寫登入程式的時候常常會用到。

不過不常寫的話又容易忘,所以在這邊來做一個紀錄。

如果只是要簡單的加密的話,如下:


string Password = "1234";  //假設密碼是1234

//使用FormsAuthentication.HashPasswordForStoringInConfigFile方法,
//第一個參數是要加密的字串,第二個參數是加密的演算法。

Password = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(Password, System.Web.Configuration.FormsAuthPasswordFormat.SHA1.ToString());

加密完之後,字串就會變成這樣:

pass

只要將這組字串存到資料庫,就算資料庫管理員打開資料庫想偷看密碼,看到的也是亂

七八糟的字母組合。

登入的時候,也只要將使用者輸入的密碼,經由同樣的加密方式產生出來的字串,再去

跟資料庫內的字串做比對,就可以完成登入了。

 

下面一個是稍微複雜一點的加密方式:


string Password = "1234";
            
//密碼編譯亂數產生器
System.Security.Cryptography.RNGCryptoServiceProvider rng
          =new System.Security.Cryptography.RNGCryptoServiceProvider();

byte[] buf = new byte[15];
            
//將產生的密碼亂數填入byte[]陣列
 rng.GetBytes(buf); // 

 //將陣列轉成字串
string salt = Convert.ToBase64String(buf);

//原輸入密碼1234加上salt字串,再進行加密動作
Password = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(Password + salt, "sha1");

 

加密完之後,可以看到跟上面簡單加密後的密碼不一樣了。

pass2

使用這種加密的時候,資料表中必須要多一個欄位來存salt字串,因為如果會員下次登入

的時候,必須將輸入的密碼(這邊範例是1234),加上salt這個字串,再進行加密,得到的

的才會跟當初存入資料庫的密碼吻合。