Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server哈希字节SHA2_512和C#_C#_Sql Server_Encryption_Sqlclr - Fatal编程技术网

SQL Server哈希字节SHA2_512和C#

SQL Server哈希字节SHA2_512和C#,c#,sql-server,encryption,sqlclr,C#,Sql Server,Encryption,Sqlclr,如果在SQL Server中运行以下操作: SELECT HASHBYTES('SHA2_512', 'THE CAT SAT ON THE MAT') 然后在C中运行这个# 我得到了同样的价值,这是伟大的。但是,如果我在我的C#代码中传递一个字符串变量,那么如下所示: string words = "THE CAT SAT ON THE MAT" byte[] test test = WordFunctions.SHA512(words); public static byte[] SH

如果在SQL Server中运行以下操作:

SELECT HASHBYTES('SHA2_512', 'THE CAT SAT ON THE MAT')
然后在C中运行这个#

我得到了同样的价值,这是伟大的。但是,如果我在我的C#代码中传递一个字符串变量,那么如下所示:

string words = "THE CAT SAT ON THE MAT"

byte[] test
test = WordFunctions.SHA512(words);
public static byte[] SHA512(String plaintext)
{
   // convert the passPhrase string into a byte array
   ASCIIEncoding AE = new ASCIIEncoding();
   byte[] passBuff = AE.GetBytes(plaintext);

   SHA512Managed hashVal = new SHA512Managed();
   byte[] passHash = hashVal.ComputeHash(passBuff);

   return passHash;
}
那我就得不到同样的值了

有什么想法吗

SHA512函数如下所示:

string words = "THE CAT SAT ON THE MAT"

byte[] test
test = WordFunctions.SHA512(words);
public static byte[] SHA512(String plaintext)
{
   // convert the passPhrase string into a byte array
   ASCIIEncoding AE = new ASCIIEncoding();
   byte[] passBuff = AE.GetBytes(plaintext);

   SHA512Managed hashVal = new SHA512Managed();
   byte[] passHash = hashVal.ComputeHash(passBuff);

   return passHash;
}

以下代码适用于我:

private static readonly Encoding Encoding1252 = Encoding.GetEncoding(1252);

public static byte[] SHA1HashValue(string s)
{
    byte[] bytes = Encoding1252.GetBytes(s);

    var sha1 = SHA512.Create();
    byte[] hashBytes = sha1.ComputeHash(bytes);

    return hashBytes;
}

您有权访问
WordFunctions.SHA512
的代码吗?是的,对不起,我应该包括它!我将编辑原始帖子。因此,暂时忽略SQL Server,你说的是
WordFunctions.SHA512(“猫坐在垫子上”)
WordFunctions.SHA512(words)
哪里
words=“猫坐在垫子上”
返回不同的东西?这似乎很奇怪。顺便说一句,更喜欢使用
UTF8Encoding
作为通用编码器。您的第一行代码不应该编译,因为SHA512返回的是
byte[]
,而不是字符串。不管怎样,我用你的
SHA512
方法代码测试了这一点,当我比较它们时,两个
字节
数组都是相同的。@AakashM:他不能使用UTF8,他必须使用ASCII,因为编码必须与
“猫坐在垫子上”
的SQL匹配,这是ASCII。通常,如果答案中包含对代码意图的解释,以及为什么不介绍其他代码就解决了问题,那么答案会更有帮助。谢谢,它帮助我找出了为什么C#产生的SHA512与sql server产生的SHA512不同