gpt4 book ai didi

c# - ruby 和 C# 之间 SHA 哈希的差异

转载 作者:数据小太阳 更新时间:2023-10-29 08:21:47 26 4
gpt4 key购买 nike

我正在开发一个应用程序,它使用了一些 REST 网络服务。技术文档说我应该在请求中传递某些字符串的 SHA256 哈希值。

在一个示例请求中(在文档中)一个字符串:

hn-Rw2ZHYwllUYkklL5Zo_7lWJVkrbShZPb5CD1expires=1893013926label[0]=any/somestatistics=1d,2d,7d,28d,30d,31d,lifetimestatus=upl,livetitle=a

执行后:

digest = Digest::SHA256.digest(string_to_sign)
signature = Base64::encode64(digest).chomp.gsub(/=+$/, '')

哈希结果:

YRYuN2zO+VvxISNp/vKQM5Cl6Dpzoin7mNES0IZJ06U

这个例子是用 ruby​​ 编写的,因为文档是为 ruby​​ 开发人员准备的。

我正在用 C# 开发我的应用程序,并针对完全相同的字符串,当我执行时:

byte[] rawHash = sha256.ComputeHash(rawRequest, 0, rawRequest.Length);
string friendlyHash = Convert.ToBase64String(rawHash);

并删除尾随的“=”符号,我得到:

Vw8pl/KxnjcEbyHtfNiMikXZdIunysFF2Ujsow8hyiw

因此,应用程序无法执行,导致签名不匹配错误。

我尝试在将字符串转换为散列之前的字节数组时更改编码,但没有任何改变。

有什么想法吗?

最佳答案

基于文档here ,您的字符串中缺少 - (即破折号)。似乎 Acrobat 很有帮助地从文档的复制粘贴中删除了它...

这是我拼凑在一起的一些代码,它们与示例具有相同的值(如果你修剪了最后的 =,它就会)

    string s = "hn-Rw2ZH-YwllUYkklL5Zo_7lWJVkrbShZPb5CD1expires=1893013926label[0]=any/somestatistics=1d,2d,7d,28d,30d,31d,lifetimestatus=upl,livetitle=a";

SHA256Managed sh = new SHA256Managed();
byte[] request = System.Text.UTF8Encoding.UTF8.GetBytes(s);
sh.Initialize();
byte[] b4bbuff = sh.ComputeHash(request, 0, request.Length);

string b64 = Convert.ToBase64String(b4bbuff);

关于c# - ruby 和 C# 之间 SHA 哈希的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/984680/

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