一、生成 string 对应的 MD5 码
/// <summary>/// 生成 string 对应的 MD5 码/// </summary>/// <param name="s">需要转换的字符串 string<br/>/// 如果用于远程第三方认证,s = username + DateTime.Now.Ticks.ToString() + 线下传递的Key;<br/>/// 然后将 hash 值 与 username、DateTime.Now.Ticks.ToString() 共3个参数一起传递给第三方;<br/>/// 第三方使用相同算法生成 MD5 码进行比较验证,使用 DateTime.Now.Ticks.ToString() 判定是否超时。</param>/// <returns>转换后的 hash 值:MD5 码</returns>public static string GetMD5FromString(string s){byte[] data = System.Security.Cryptography.MD5.HashData(System.Text.Encoding.UTF8.GetBytes(s));System.Text.StringBuilder sBuilder = new();for (int i = 0; i < data.Length; i++){sBuilder.Append(data[i].ToString("x2"));}return sBuilder.ToString().ToUpper();}
二、 生成 string 对应的 Pbkdf2 码
/// <summary>/// derive a 256-bit subkey (use HMACSHA256 with 100 iterations)/// </summary>/// <param name="password">需要转换的字符串 string<br/>/// 如果用于远程第三方认证,则为需要认证的 username</param>/// <param name="salt">盐值,通常为随机数,确保每次生成的 hash 值不同,用于本地密码验证时 salt 与 hash 值同步保存。<br/>/// 如果用于远程第三方认证,salt = DateTime.Now.Ticks.ToString() + 线下传递的Key;<br/>/// 然后将 hash 值与 username、DateTime.Now.Ticks.ToString() 共3个参数一起传递给第三方;<br/>/// 第三方使用相同算法生成 hash 值进行比较验证,使用 DateTime.Now.Ticks.ToString() 判定是否超时。</param>/// <returns>转换后的 hash 值:Pbkdf2 码</returns>public static string GetPbkdf2FromString(string password, string salt){string hashed = Convert.ToBase64String(Microsoft.AspNetCore.Cryptography.KeyDerivation.KeyDerivation.Pbkdf2(password: password,salt: System.Text.Encoding.UTF8.GetBytes(salt),prf: Microsoft.AspNetCore.Cryptography.KeyDerivation.KeyDerivationPrf.HMACSHA256,iterationCount: 100,numBytesRequested: 256 / 8));return hashed;}