我有下面的代码,由用户输入其散列密码,并随后将其存储在一个SQL Server数据库中ASP.NET哈希密码:使用MD5
Byte[] originalPassword;
Byte[] hashedPassword;
MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
UTF8Encoding encoder = new UTF8Encoding();
originalPassword = encoder.GetBytes(passwordBox.Text);
hashedPassword = md5Hasher.ComputeHash(originalPassword);
command.Parameters.Add(new SqlParameter("Password", hashedPassword));
command.ExecuteNonQuery();
我的问题是,我已经在数据库中存储了一些明文密码。我究竟如何将它们修改为这种新的散列格式,因为它们显示为'0xA99ED ....'?
好了,你必须使用MD5出于某种原因...你不能至少使用盐,或者甚至存储整个散列?无论如何,你似乎认为字符串和二进制文件是等价的 - 它们不是,需要编码。 – Aaronaught
问题是什么?当更改为nvarchar时,您不能指望binary16列具有相同的结果。 –
我认为你的问题在于这句话:“我手动输入一个字符串格式的MD5并将数据类型改回二进制(16)”。如果你输入了散列的十六进制表示,并且它通过在十六进制表示中获取每个字符的二进制值而转换为二进制值,这是正常的,结果是不一样的... –