我有用來生成散列的方法的散列:匹配在C#創建與SQL
public static string GetMD5Hash(string input)
{
System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] bs = System.Text.Encoding.UTF8.GetBytes(input);
bs = x.ComputeHash(bs);
System.Text.StringBuilder s = new System.Text.StringBuilder();
foreach (byte b in bs)
{
s.Append(b.ToString("x2").ToLower());
}
return s.ToString();
}
我然後保存在一個varchar(255)列的散列。知道原始輸入字符串是什麼,是否有可能使用sql(2005)?獲得存儲在varchar(255)列中的相同散列值?
我已經嘗試過使用不同的數據類型,轉換和hashbytes()函數,但一直未能關閉。我嘗試失敗:(的
例
select convert(varchar, hashbytes('MD5', convert(varbinary(200), '<censored>',0)))
請勿使用MD5;這是不安全的。 – SLaks
爲什麼'varchar(255)'? 'MD5CryptoServiceProvider'從'ComputeHash()'返回一個16字節的數組,所以你應該使用char(32)(如果你把它保存爲hex) – BrokenGlass
也許是因爲ToLower()? – Greenisha