首页 / RUBY / 将C#SHA256哈希转换为Ruby
将C#SHA256哈希转换为Ruby
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了将C#SHA256哈希转换为Ruby,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1763字,纯文字阅读大概需要3分钟。
内容图文
![将C#SHA256哈希转换为Ruby](/upload/InfoBanner/zyjiaocheng/681/b00978df21a64ab3b3237b8843214cb7.jpg)
我有C#代码:
byte[] bytes = new UnicodeEncoding().GetBytes(input);
return Convert.ToBase64String(new SHA256Managed().ComputeHash(bytes));
将字符串编码为SHA2哈希,然后以64为基数进行编码.我需要将其转换为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'))
我想我可以遍历数组,但这似乎是不必要的.
解决方法:
解:
您需要使用UTF-16LE编码来获取相同的SHA-256哈希
p hash = Digest::SHA256.base64digest("Hello".encode('UTF-16LE'))
我是怎么找到的?
我使用Online C# Tool使用以下代码创建字符串“ Hello”的哈希:
using System.IO;
using System;
using System.Text;
using System.Security.Cryptography;
class Program
{
static void Main()
{
byte[] bytes = new UnicodeEncoding().GetBytes("Hello");
String s = Convert.ToBase64String(new SHA256Managed().ComputeHash(bytes));
Console.WriteLine(s);
}
}
上面的程序产生了输出oH5Pc0MkbIKybzLlb4VBjVGNiy8trnfx1W / nr1Dbl68 =
然后,我编写了一个Ruby程序来计算字符串“ Hello”的Base64编码的SHA-256哈希,方法是使用Ruby支持的所有char编码对字符串进行编码,以找出哪种char编码将给出完全相同的结果.
require "digest/sha2"
require "base64"
s = "Hello"
Encoding.list.each { |e| puts "Encoding: #{e.to_s} => Hash: #{Digest::SHA256.base64digest(s.encode(e)) rescue "error"}"}
运行该程序后,我得出的结论是,如果您使用UTF-16LE编码,您将获得完全相同的输出.
p hash = Digest::SHA256.base64digest("Hello".encode('UTF-16LE'))
根据documentation of UnicodeEncoding,它:
Represents a UTF-16 encoding of Unicode characters.
内容总结
以上是互联网集市为您收集整理的将C#SHA256哈希转换为Ruby全部内容,希望文章能够帮你解决将C#SHA256哈希转换为Ruby所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。