Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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
C# 转换(NVARCHAR(100),HASHBYTES(N';SHA1';,@PasswordWithSalt),2)等效于c语言#_C#_Sql_Sql Server_Hashbytes - Fatal编程技术网

C# 转换(NVARCHAR(100),HASHBYTES(N';SHA1';,@PasswordWithSalt),2)等效于c语言#

C# 转换(NVARCHAR(100),HASHBYTES(N';SHA1';,@PasswordWithSalt),2)等效于c语言#,c#,sql,sql-server,hashbytes,C#,Sql,Sql Server,Hashbytes,我正在尝试将身份验证从存储过程移动到EF。SQL本身返回2个结果。我应该如何验证它们 将对照表中存储的值检查该值 ECC2065575DCBF977CD923996C598C3DC481404E SQL语法: Declare @Password AS NVARCHAR(256) = 'Quest_2016' DECLARE @PasswordSalt AS NVARCHAR(5) = 'LCY''n' DECLARE @PasswordWithSalt AS NVARCHAR(261) =

我正在尝试将身份验证从存储过程移动到EF。SQL本身返回2个结果。我应该如何验证它们

将对照表中存储的值检查该值

ECC2065575DCBF977CD923996C598C3DC481404E
SQL语法:

Declare @Password AS NVARCHAR(256) = 'Quest_2016'

DECLARE @PasswordSalt AS NVARCHAR(5) = 'LCY''n'

DECLARE @PasswordWithSalt AS NVARCHAR(261) = @Password + @PasswordSalt

print @PasswordWithSalt
结果:
1任务2016LCY'n

print HASHBYTES(N'SHA1', @PasswordWithSalt )
结果2:
0xECC2065575DCBF977CD923996C598C3DC481404E-----

print HASHBYTES(N'SHA1', 'Quest_2016LCY''n')
结果3:
0x5E85AB2ED11CDB696BC054431D7C8571F4F8FA8-----

还有,这是如何在C中实现的#


这两个查询的问题是字符串值相同,但字节不同

第一个问题

打印HASHBYTES(N'SHA1',@PasswordWithSalt)

使用unicode编码获取字节,因此每个字符为2个字节(0x5100750065007073005F003200300310036004C004300590027006E00)

第二个问题

打印HASHBYTES(N'SHA1',Quest_2016; cy''N')

使用ASCII,使每个字符都是一个字节

要在第二个示例中获得相同的结果,请在字符串前面加
N'
。它将告诉SQL server这是一个unicode字符串

打印哈希字节(N'SHA1',N'Quest_2016LCY''N')

生成哈希值0xECC2065575DCBF977CD923996C598C3DC481404E

在C#中,还可以使用SHA1获取字符串的哈希值,这里还需要具体说明字节编码

byte[] data = Encoding.Unicode.GetBytes(@"Quest_2016LCY'n");
byte[] hash = SHA1.Create().ComputeHash(data);
Console.Write(hash.Select(x=>x.ToString("X2")).Aggregate((x,y)=>x+y));
打印
ECC2065575DCBF977CD923996C598C3DC481404E
,但如果将
Encoding.Unicode
更改为
Encoding.ASCII
,则会给出
5E85AB2ED11CDB696BC054431D7C8571F4F8FA8