我正在寻找一个返回32(或64)位的哈希函数。我尝试了hashlib中的md5。例如:
import hashlib
hashlib.md5(b"H").hexdigest()
给予
c1d9f50f86825a1a2302ec2449c17196
如果没有这样的散列函数,是否可以从散列中提取前导32位?我试过:
st = hashlib.md5(b"H").hexdigest()
' '.join(format(x, 'b') for x in bytearray(st, 'utf-8'))
要将哈希转换为二进制,但它会提供:
'1100011 110001 1100100 111001 1100110 110101 110000 1100110 111000 110110 111000 110010 110101 1100001 110001 1100001 110010 110011 110000 110010 1100101 1100011 110010 110100 110100 111001 1100011 110001 110111 110001 111001 110110'
这不可能是正确的,因为他们都是从两个一开始的
下面,我提供了四种获取32/64位哈希值的解决方案,如整数、字节、十六进制、位(二进制字符串)
作为十进制整数(大端):
Try it online!
输出:
不使用整数,只需按小尾数顺序获取字节,请执行以下操作:
Try it online!
输出:
也可以获取32/64位十六进制值。第一个变量为小端十六进制字节:
Try it online!
输出:
第二个变量为十六进制数(大端):
Try it online!
输出:
如果需要,您甚至可以获取位(二进制字符串)。这里的位正好是32和64,并以大端顺序表示
Try it online!
输出:
如果要计算二进制表示中前导零的数量,则可以执行以下操作:
Try it online!
输出:
不要忘记,上面的哈希的二进制表示是按大端顺序计算的,这意味着最重要的位位于最左边。如果需要计算最低有效位一侧的零位计数,则首先反转字符串,如下所示:
Try it online!
输出:
相关问题 更多 >
编程相关推荐