登入 帳號 密碼 加密 雜湊
範例解說
資料庫(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();
}
我只是一棵樹