HashAlgorithm hashAlgorithm = new SHA1CryptoServiceProvider(); //MD5CryptoServiceProvider();
byte[] result = hashAlgorithm.ComputeHash(Encoding.UTF8.GetBytes(member.Password));
//获取方式1 正常获取
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < result.Length; i++)
{
sBuilder.Append(result[i].ToString("x2"));
}
member.Password = sBuilder.ToString();
//获取方式2 乱码
//member.Password = Encoding.UTF8.GetString(result);
ToString("X2") 为C#中的字符串格式控制符
X为 十六进制
2为 每次都是两位数
比如 0x0A ,若没有2,就只会输出0xA
假设有两个数10和26,正常情况十六进制显示0xA、0x1A,这样看起来不整齐,为了好看,可以指定"X2",这样显示出来就是:0x0A、0x1A。
两者的本质是不一样的。。
方式1是将byte[]转化为对应的十六进制字符串形式,最终的结果字符一定限定在0~F的范围内。
方式2是将byte[]按UTF8编解码规则解析为字符串,两者根本不是在干同一件事