手機(jī)網(wǎng)站生成app解析域名網(wǎng)站
通過(guò)一定的哈希算法(典型的有MD5,SHA-1等),將一段較長(zhǎng)的數(shù)據(jù)映射為較短小的數(shù)據(jù),這段小數(shù)據(jù)就是大數(shù)據(jù)的哈希值。他最大的特點(diǎn)就是唯一性,一旦大數(shù)據(jù)發(fā)生了變化,哪怕是一個(gè)微小的變化,他的哈希值也會(huì)發(fā)生變化。類(lèi)似于DNA,既然是DNA,那就保證了沒(méi)有兩個(gè)數(shù)據(jù)的哈希值是完全相同的。
哈希值的作用:哈希值,即HASH值,是通過(guò)對(duì)文件內(nèi)容進(jìn)行加密運(yùn)算得到的一組二進(jìn)制值,主要用途是用于文件校驗(yàn)或簽名。正是因?yàn)檫@樣的特點(diǎn),它常常用來(lái)判斷兩個(gè)文件是否相同。
比如,從網(wǎng)絡(luò)上下載某個(gè)文件,只要把這個(gè)文件原來(lái)的哈希值同下載后得到的文件的哈希值進(jìn)行對(duì)比,如果相同則表示兩個(gè)文件完全一致,下載過(guò)程沒(méi)有損壞文件。而如果不一致,則表明下載得到的文件跟原來(lái)的文件不同,文件在下載過(guò)程中受到了損壞。
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);}
}