手機網(wǎng)站生成app解析域名網(wǎng)站
通過一定的哈希算法(典型的有MD5,SHA-1等),將一段較長的數(shù)據(jù)映射為較短小的數(shù)據(jù),這段小數(shù)據(jù)就是大數(shù)據(jù)的哈希值。他最大的特點就是唯一性,一旦大數(shù)據(jù)發(fā)生了變化,哪怕是一個微小的變化,他的哈希值也會發(fā)生變化。類似于DNA,既然是DNA,那就保證了沒有兩個數(shù)據(jù)的哈希值是完全相同的。
哈希值的作用:哈希值,即HASH值,是通過對文件內(nèi)容進行加密運算得到的一組二進制值,主要用途是用于文件校驗或簽名。正是因為這樣的特點,它常常用來判斷兩個文件是否相同。
比如,從網(wǎng)絡(luò)上下載某個文件,只要把這個文件原來的哈希值同下載后得到的文件的哈希值進行對比,如果相同則表示兩個文件完全一致,下載過程沒有損壞文件。而如果不一致,則表明下載得到的文件跟原來的文件不同,文件在下載過程中受到了損壞。
using System.Security.Cryptography;
using System.Text;namespace WebApplicationPwd;public static class PasswordHelper
{public static string Encryption(string pwd, string? salt){if (string.IsNullOrEmpty(salt)){var pwdBytes = Encoding.ASCII.GetBytes(pwd);var pwdHashBytes = MD5.HashData(pwdBytes);return Convert.ToBase64String(pwdHashBytes);}else{//var pwdBytes = Encoding.ASCII.GetBytes(pwd + salt);//var pwdHash256Bytes = SHA256.HashData(pwdBytes);//return Convert.ToBase64String(pwdHash256Bytes);#region PBKDF2+saltvar saltBytes = Encoding.ASCII.GetBytes(salt);using var pkdf2 = new Rfc2898DeriveBytes(pwd, saltBytes, 1000);var pwdHashRfcBytes = pkdf2.GetBytes(32);return Convert.ToBase64String(pwdHashRfcBytes);#endregion#region Bcrypt & Argon2 不需要加鹽 // <PackageReference Include="BCrypt.Net-Next" Version="4.0.3" />//return BCrypt.Net.BCrypt.HashPassword(pwd);#endregion}}public static bool VerifyPassword(string pwd, string hashPwd, string salt){return Encryption(pwd, salt) == hashPwd;}public static string CreateSalt(){var randomNu = RandomNumberGenerator.GetBytes(32);return Convert.ToBase64String(randomNu);}
}