在 python 中将 256 位哈希拆分为 32 位前缀

Posted

技术标签:

【中文标题】在 python 中将 256 位哈希拆分为 32 位前缀【英文标题】:split a 256 bit hash into 32 bit prefix in python 【发布时间】:2010-10-25 23:54:37 【问题描述】:

在 python 中,如何将 SHA256 哈希拆分为 32 位前缀?我正在使用 Google 的安全浏览 api,它要求我比较我自己的集合和 API 发送给我的集合之间的 32 位前缀。我了解如何从 Google 中提取列表,并且了解如何从解析的 URL 中形成散列集合,但是,我不明白如何派生每个散列的前 32 位。

在获得前缀后,最好的做法是将它们放在字典中,对应的键/值对是前缀/完整哈希,以便我以后可以引用它们?

【问题讨论】:

【参考方案1】:

32 位是前 4 个字节。所以你可以对字节数组进行切片。

hash_obj.digest()[:4]

您可以将其用作字典键。

编辑

我不确定你是否需要十六进制表示。

hash_obj.hexdigest()[:8]

【讨论】:

工作就像一个魅力,谢谢。切片是表示位数还是字节数?我怎么能分辨出区别? IE 为什么是十六进制:8? @Stev0,对于 ASCII 文本,存储一个字符需要 1 个字节(8 位),因此采用前 4 个字符可以获得 32 位(4*8)。我松散地使用术语字符,根据 python 版本,它实际上可能是一个字节数组。在十六进制表示法中,每个字符代表 4 位,因此要表示一个字节,您需要 2 个字符,因此您需要前 8 个字符。需要明确的是,十六进制版本是前 32 位的人类友好表示,非十六进制形式是前 32 位。 en.wikipedia.org/wiki/Hexadecimal

以上是关于在 python 中将 256 位哈希拆分为 32 位前缀的主要内容,如果未能解决你的问题,请参考以下文章

在python中将32位二进制转换为十进制

MD5、sha1、sha256分别输出多少位?

如何在 Neon 中将 uint32x4_t 转换为 uint8x16_t?

区块链入门到实战之区块链 – 哈希(Hash)

关于在Hive中将特定字符分隔的字符串拆分成多行的应用

在python中将日期时间拆分为年和月列