gpt4 book ai didi

c# - 将 C# 生成的校验和与 SQL Server 生成的校验和进行比较

转载 作者:太空宇宙 更新时间:2023-11-03 12:36:13 25 4
gpt4 key购买 nike

我想将大量数据从 C# 发送到我的数据库,连同作为最后一个值的计算校验和,应该将其与 SQL Server 的存储过程将从这些值计算的校验和进行比较。

为了实现这一点,我尝试了很多不同的方法,例如 SQL 内置的 Checksum 方法和不同的散列法,但要么是 C# 和 SQL 计算出不同的值,要么散列法没有。无法使用我需要的 nvarchars 和整数(fx.MD5 哈希)。

有没有人真正设法做到这一点,或者知道如何做到这一点?

引用我们失败的 MD5 尝试: SQL Server HASHBYTES conversion inconsistency?

这里计算出来的结果和c#用nvarchars的时候不一样

哈希方法:

Set @result = convert(nvarchar(32), hashbytes('MD5', @DataID + @Data1 + @Data2 + @Data3), 2)

此外,当您为散列方法提供一个整数作为参数(如 DataID)时,它会提示:

“参数数据类型 int 对于 hashbytes 函数的参数 2 无效。”

最佳答案

考虑到评论,这里是你如何做到的(/ 用作保护字符,只需要一个,因为 int 总是 4 字节):

declare @DataID int = 1234
declare @Data1 nvarchar(max) = N'foo æøåè𨝫 bar'
declare @Data2 nvarchar(max) = N'qux quee'

declare @buffer varbinary(max)
= cast(@DataID as varbinary(4)) + cast(@Data1 + N'/' as varbinary(max)) + cast(@Data2 as varbinary(max))

select @buffer, select hashbytes('MD5', @buffer)

为了

0x000004D266006F006F002000E600F800E500E80061D86BDF20006200610072002F0071007500780020007100750065006500  
0x9DA035DB9D9C319BB636D5E89F4D0EC6

C#

int    DataID = 1234;
string Data1 = "foo æøåè𨝫 bar";
string Data2 = "qux quee";

List<byte> buffer = new List<byte>(BitConverter.GetBytes(DataID));
buffer.Reverse(); // swap endianness for int
buffer.AddRange(Encoding.Unicode.GetBytes(Data1 + "/"));
buffer.AddRange(Encoding.Unicode.GetBytes(Data2));

using (MD5 md5 = MD5.Create())
{
byte[] hashBytes = md5.ComputeHash(buffer.ToArray());

//...
}

为了

000004D266006F006F002000E600F800E500E80061D86BDF20006200610072002F0071007500780020007100750065006500
9DA035DB9D9C319BB636D5E89F4D0EC6

关于c# - 将 C# 生成的校验和与 SQL Server 生成的校验和进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40912390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com