我有几个不同的代码,但简短的故事是我使用SHA1将一些密码插入
MySQL数据库,并将SHA1哈希计算到.NET中,并且它们不匹配.我认为这是我的编码代码在.NET中的问题.
INSERT INTO user_credentials (Password) VALUES (SHA1('password'));
密码哈希到5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
.NET代码:
public static string GetPasswordHash(string password) { // problem here with encoding? byte[] byteArray = Encoding.ASCII.GetBytes(password); SHA1 sha = new SHA1CryptoServiceProvider(); byte[] hashedPasswordBytes = sha.ComputeHash(byteArray); return Encoding.ASCII.GetString(hashedPasswordBytes); }
密码散列为[?a?%l?3〜???
感谢任何帮助!
解决方法
在MysqL示例中,您将编码为
hexadecimal字符串,在.NET示例中,您将以ASCII编码.两个编码不一样.
如果您在.NET版本中转换为十六进制,则会得到正确的结果:
string hex = BitConverter.ToString(hashedPasswordBytes);
结果:
5B-AA-61-E4-C9-B9-3F-3F-06-82-25-0B-6C-F8-33-1B-7E-E6-8F-D8