我正在开发一个使用一些 REST Web 服务的应用程序。它的技术文档说我应该在请求中传递一些字符串的 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
因此,应用程序无法执行,从而导致签名不匹配错误。
我尝试在将字符串转换为散列之前的字节数组时更改编码,但没有任何改变。
有任何想法吗?