我有一个Python3函数,我需要用Ruby编写它,这个函数接受3个参数、2个字符串和1个数字,将它们转换成字节并获取SHA256摘要
Python代码如下所示:
number = 1
bytes_number = number.to_bytes(length=(8 + (number + (number < 0)).bit_length()) // 8, byteorder='big', signed=True)
a = "a416985e694697e6ef8b4c0126a2e26e5491fd91257c6cb3d699350e3ab285ee"
b = "fc488dbb52f9d805e48e9289f9f0f80caa9c2713750508bdb3ab5c648d0b9579"
string_hash = hashlib.sha256(bytes.fromhex(a) + bytes.fromhex(b) + bytes_number).hexdigest()
print(string_hash)
Python3中的输出是
1640fb7d038f3f782478e7414e65df11209860756c1464fa462b62d1ec3f9685
我一直试图在Ruby中实现同样的功能,但遇到了一些问题:
require 'digest'
number = 1
a = "a416985e694697e6ef8b4c0126a2e26e5491fd91257c6cb3d699350e3ab285ee"
b = "fc488dbb52f9d805e48e9289f9f0f80caa9c2713750508bdb3ab5c648d0b9579"
hash = Digest::SHA256.hexdigest(a + b + number.to_s)
print hash
但是在ruby中哈希是不正确的,除此之外,我在ruby中尝试了一些pack和unpack的组合,但是我找不到正确的哈希
更新:
我使用下面的代码正确地完成了从十六进制字符串到字节的转换。数字到字节的转换也很有效,但问题是现在的填充为0。我创建了一个函数,但在某些情况下失败:
require 'digest'
number = 1
a = "a416985e694697e6ef8b4c0126a2e26e5491fd91257c6cb3d699350e3ab285ee"
b = "fc488dbb52f9d805e48e9289f9f0f80caa9c2713750508bdb3ab5c648d0b9579"
hash = Digest::SHA256.hexdigest([a].pack("H*") + [b].pack("H*") + [add_pad(number.to_i.to_s(16))].pack("H*"))
print hash
添加键盘功能:
def add_pad(num)
if amount.length % 2 == 0
"00" + num
else
"0" + num
end
end
但在少数情况下,这会失败,例如,如果数字设置为100,则生成的哈希值不匹配
目前没有回答
相关问题 更多 >
编程相关推荐