如何在SQL Server中从C#函数重新创建MD5哈希
我正在与一个遗留代码库和一个MD5函数(下面共享)作斗争,该函数返回一个我无法通过SQL Server以任何方式重新创建的值,尽管使用了如何在SQL Server中从C#函数重新创建MD5哈希,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我正在与一个遗留代码库和一个MD5函数(下面共享)作斗争,该函数返回一个我无法通过SQL Server以任何方式重新创建的值,尽管使用了HASHBYTES、Base64编码或其他策略 我们的MD5 C功能: public string Md5(string value) { CryptographyManager crypto = EnterpriseLibraryContainer.Current.GetInstance<CryptographyManager>();
HASHBYTES
、Base64编码或其他策略
我们的MD5 C功能:
public string Md5(string value)
{
CryptographyManager crypto = EnterpriseLibraryContainer.Current.GetInstance<CryptographyManager>();
//byte[] valueToHash = (new UnicodeEncoding()).GetBytes(value);
string generatedHash = crypto.CreateHash("MD5CryptoServiceProvider", value);
// Clear the byte array memory.
//Array.Clear(valueToHash, 0, valueToHash.Length);
return generatedHash;
}
这不是标准的Base64编码,我无法找到在SQL中为关联项目重新创建它的方法 请帮助我了解上面的MD5函数返回的内容。测试此项: 希望能有帮助
公共静态字符串MD5(此字符串为普通字符串)
{
byte[]textBytes=System.Text.Encoding.UTF8.GetBytes(正常);
尝试
{
System.Security.Cryptography.MD5CryptServiceProvider cryptHandler;
cryptHandler=new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[]hash=cryptHandler.ComputeHash(textBytes);
字符串ret=“”;
foreach(散列中的字节a)
{
if(a<16)
ret+=“0”+a.ToString(“x”);
其他的
ret+=a.ToString(“x”);
}
返回ret;
}
抓住
{
投掷;
}
}
你好,德里克,我没有你的问题的答案,但我找到了一些可能对你有帮助的链接。此外,也许你可以试着问这个问题或继续搜索。链接:希望它有帮助:)“这不是标准的Base64编码”你声称这是什么依据?应该提到的是,你返回的是十六进制而不是Base64。另外,通过将if块替换为justret+=a.ToString(“X2”)代码>。
RTYSPVSIIGNYx5++zd8EfNwYAONmPWZnsKaYiQHBCP8=
public static string MD5(this string normal)
{
byte[] textBytes = System.Text.Encoding.UTF8.GetBytes(normal);
try
{
System.Security.Cryptography.MD5CryptoServiceProvider cryptHandler;
cryptHandler = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] hash = cryptHandler.ComputeHash(textBytes);
string ret = "";
foreach (byte a in hash)
{
if (a < 16)
ret += "0" + a.ToString("x");
else
ret += a.ToString("x");
}
return ret;
}
catch
{
throw;
}
}