【发布时间】:2013-03-14 12:11:43
【问题描述】:
如果我在 SQL Server 中运行以下命令:
SELECT HASHBYTES('SHA2_512', 'THE CAT SAT ON THE MAT')
然后在 C# 中运行它
string test = WordFunctions.SHA512("THE CAT SAT ON THE MAT");
我得到了相同的价值,这很棒。但是,如果我在 C# 代码中传递一个字符串变量,则如下所示:
string words = "THE CAT SAT ON THE MAT"
byte[] test
test = WordFunctions.SHA512(words);
那我没有得到相同的值?!
有什么想法吗?
SHA512 函数如下所示:
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;
}
【问题讨论】:
-
你可以访问
WordFunctions.SHA512的代码吗? -
是的,对不起,我应该把它包括在内!我将编辑原始帖子。
-
所以,暂时忽略 SQL Server,您是在说
WordFunctions.SHA512("THE CAT SAT ON THE MAT");和WordFunctions.SHA512(words);其中words = "THE CAT SAT ON THE MAT"返回不同的东西?这似乎很奇怪。顺便说一句,更喜欢UTF8Encoding作为通用编码器。 -
您的第一行代码不应编译,因为 SHA512 返回
byte[],而不是字符串。无论如何,我用你的SHA512方法代码对此进行了测试,当我比较它们时,两个byte数组是相同的。 -
@AakashM:他不能使用 UTF8,他必须使用 ASCII,因为编码必须匹配
'THE CAT SAT ON THE MAT'的 SQL,即 ASCII。
标签: c# sql-server encryption sqlclr