如何在SQL Server中从C#函数重新创建MD5哈希

如何在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>();

我正在与一个遗留代码库和一个MD5函数(下面共享)作斗争,该函数返回一个我无法通过SQL Server以任何方式重新创建的值,尽管使用了
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块替换为just
ret+=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;
            }
        }