我正在尝试编写密码散列代码并遇到散列方法问题,然后创建此测试代码以查看到底发生了什么。
该方法首先使用
byte
生成密码盐和散列作为 HMACSHA512
数组,然后将这两个值转换为字符串,然后将它们转换回 byte
数组。
string password = "xxx";
byte[] pswSalt;
byte[] pswHash;
using (HMACSHA512 hmac = new HMACSHA512())
{
pswSalt = hmac.Key;
pswHash = hmac.ComputeHash(System.Text.Encoding.UTF8.GetBytes(password));
}
var saltAsString = Encoding.UTF8.GetString(pswSalt);
var hashAsString = Encoding.UTF8.GetString(pswHash);
var pswSaltFromString = Encoding.UTF8.GetBytes(saltAsString);
var pswHashFromString = Encoding.UTF8.GetBytes(hashAsString);
任意字节序列无法转换为 Unicode 并返回。一些字节序列作为 Unicode 无效,一些可能被规范化为不同的序列。
如果确实需要用字符串表示字节,可以使用Base64
请注意,您可以将字节数组存储在数据库中,因此您不需要为此目的使用字符串,例如,在 MySQL 中,您可以使用
VARBINARY
数据库类型。