Hashing
Hashing
-
不可逆
-
一樣的內容hash出來的結果一定是一樣的
-
內容不一樣hash出來的值一定不一樣
-
-
常見Hashing加密演算法
-
MD5
-
SHA(SHA1, SHA256, SHA384, SHA512)
-
-
計算數度快(依據演算法不同)
-
一般用在儲存密碼、比對檔案和資料篡改檢查
這邊以最常見的密碼加密為範例,使用SHA256 + 加鹽的運用,將密碼加密,
再來因為相同內容hash出來的值會一樣的特性,驗證使用者輸入的密碼是否正確。
static void Main(string[] args)
{
string password = "dnjuey";
// 密碼加密
string hashValue = HashPassword(password);
Console.WriteLine("加密後的hash value:{0}", hashValue);
// output : 加密後的hash value:QZ+92ih3yGWMLniLsSIW3KNxSyXBta8CD3S51PxvejA=
// 模仿輸入密碼,驗證密碼是否正確
string inputPassowrd = "dnjuey";
if (ValidatePassowd(inputPassowrd, hashValue))
{
Console.WriteLine("密碼正確");
}
else
{
Console.WriteLine("密碼錯誤");
}
// output: 密碼正確
}
private static string HashPassword(string password)
{
const string salt = "SecretSalt";
// 密碼加鹽
string passwordWithSalt = password + salt;
// 將加鹽後的密碼轉成Byte
byte[] passwordWithSaltBytes = Encoding.Default.GetBytes(passwordWithSalt);
// 選擇SHA256加密演算法
var hash = new SHA256CryptoServiceProvider();
// hash 加密
byte[] hashValue = hash.ComputeHash(passwordWithSaltBytes);
return Convert.ToBase64String(hashValue);
}
private static bool ValidatePassowd(string password, string hashValue)
{
string validHashValue = HashPassword(password);
return validHashValue.Equals(hashValue);
}
.NET都把這些演算法封裝好了,所以我們使用起來就是如此容易。 而MD5、SHA1、SHA2...等等的演算法,用法大同小異,只是使用的class不一樣而已。
一天一分享,身體好健康。
該追究的不是過去的原因,而是現在的目的。