SQL Server哈希字节SHA2_512和C#
如果在SQL Server中运行以下操作: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
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不同