C# 網站登入系統加密流程解說

登入 帳號 密碼 加密 雜湊
範例解說

資料庫(DB)
只有存取[未加密帳號資料]+[隨機碼]+[密碼加密資料]
    未加密帳號資料=>客戶帳號
    隨機碼=>建立客戶時產生的亂數碼(產生後除非修改密碼否則不會變動)
    密碼加密資料=>客戶原始密碼+隨機碼,一起做加密演算法的結果

程式
登入步驟
    1.輸入帳號密碼
    2.到資料庫用帳號讀取[隨機碼]+[密碼加密資料]
    3.程式將[輸入密碼]和[隨機碼]一起做加密演算法得到[程式加密碼]
    4.將資料庫[密碼加密資料]和[程式加密碼]做比對
    5.一樣就是密碼正確,否則就是密碼錯誤

//雜湊函數_SHA-512
//不管輸入長短,都將輸出一組64位的不可逆編碼,最大輸入訊息長度=>2^128-1
//ex : getSHA512("ABC1234") => "jJMzNDxsQiJBjtsdfJ+E0FFhBSYIWWChcyx8PXY//2Tsf1IgmYQ0yJbdokOud30PshPza5sZ9+SiRNXJk7jf7Q=="
//using System.Security.Cryptography;
public static string getSHA512(string sDataIn)
{
    string sData = sDataIn;                             //取得來源字串
    string returnData = "";                             //輸出
    SHA512 sha512 = new SHA512CryptoServiceProvider();  //建立一個SHA512
    byte[] source = Encoding.Default.GetBytes(sData);   //將字串轉為Byte[]
    byte[] crypto = sha512.ComputeHash(source);         //進行SHA512加密
    returnData = Convert.ToBase64String(crypto);        //把加密後的字串從Byte[]轉為字串
    return returnData;
}
//描述:網路亂數範例
//ex:QuantityIn(5) => "Emtac"
public static string getNewRandom(int QuantityIn)
{
	int Quantity = QuantityIn;
	System.Text.StringBuilder sb = new System.Text.StringBuilder();
	char[] chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
	int length = RNG.Next(Quantity, Quantity);
	for (int i = 0; i < length; i++)
	{
		sb.Append(chars[RNG.Next(chars.Length - 1)]);
	}
	return sb.ToString();
}

 

我只是一棵樹