在Ruby应用程序中,如何匹配C#中Unicode字符串的MD5哈希的输出?
下面是c#的代码片段 输出:在Ruby应用程序中,如何匹配C#中Unicode字符串的MD5哈希的输出?,c#,ruby,unicode,C#,Ruby,Unicode,下面是c#的代码片段 输出: bytes = [116, 0, 101, 0, 115, 0, 116, 0] numArray = [200, 5, 158, 46, 199, 65, 159, 89, 14, 121, 215, 241, 183, 116, 191, 230] bytes = ["116", "0", "101", "0", "115", "0", "116", "0"] 以上是使用Ruby或RubyonRails实现的相同目标,但面临一些问题- ruby代码 by
bytes = [116, 0, 101, 0, 115, 0, 116, 0]
numArray = [200, 5, 158, 46, 199, 65, 159, 89, 14, 121, 215, 241, 183, 116, 191, 230]
bytes = ["116", "0", "101", "0", "115", "0", "116", "0"]
以上是使用Ruby或RubyonRails实现的相同目标,但面临一些问题-
ruby代码
bytes = "test".bytes.to_a.join(",") + ","
bytes = bytes.gsub(",", "/0/").split("/")
numArray = Digest::MD5.digest(bytes)
输出:
bytes = [116, 0, 101, 0, 115, 0, 116, 0]
numArray = [200, 5, 158, 46, 199, 65, 159, 89, 14, 121, 215, 241, 183, 116, 191, 230]
bytes = ["116", "0", "101", "0", "115", "0", "116", "0"]
当我试图访问Digest::MD5.Digest时,它只接受字符串值,如果我将其转换为字符串,则无法获得与提供的C#代码相同的结果 这适用于Ruby 1.9.3及更高版本:
require 'digest/md5'
Digest::MD5.digest( "test".encode( 'UTF-16LE' ) ).bytes.to_a
=> [200, 5, 158, 46, 199, 65, 159, 89, 14, 121, 215, 241, 183, 116, 191, 230]
一些解释:
- 对于Unicode字符串,C#(以及一般的Microsoft代码)默认为UTF-16LE
- 插入逗号和
会给字符串带来麻烦,请使用Ruby的字符串编码方法gsub
将读取输入字符串,就像强制编码为“ASCII-8BIT”(即,它只读取字符串中存储的字节,而忽略字符语义),还将返回该编码中的数据李>Digest::MD5.Digest
字节
是每个字节的简写形式。因此它已经是一个数组了@j03w:有趣。这是1.9.3(返回一个枚举数)的一个变化-我的代码在这两种情况下都可以工作,但是.to_a
在2.0.0中是多余的。非常感谢Neil,这正是我想要的。非常感谢。你能澄清一下“用C#查找现成代码”吗?您是否需要匹配C#示例的输出?我在回答中假设情况就是这样。