我有以下C#代码:
byte[] bytes = new UnicodeEncoding().GetBytes(input);
return Convert.ToBase64String(new SHA256Managed().ComputeHash(bytes));
这是一个将字符串编码为SHA2哈希值,然后进行base64编码的方法。我需要将其转换为Ruby语言。
我尝试过几种方法,以下是其中一种:
hash = Digest::SHA256.digest(val.encode('utf-8'))
encoded = Base64.urlsafe_encode64(hash)
我的代码都产生了不匹配的相同结果。我无法让它们正常工作。如果能帮忙转换一下就感激不尽。
更新
经过一些尝试,我成功使用硬编码数组使其工作。问题在于C#代码在数组中的每个元素后面添加了一个0。这是带有硬编码数组的可行的Ruby代码:
Digest::SHA256.base64digest([99,0,104,0,97,0,100,0].pack('C*').force_encoding('utf-16'))
我想我可以遍历数组,但这似乎是不必要的。
GetBytes
方法将不会放置 BOM,我认为使用小端可能会起作用。 - Norgerman