在 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 位前缀的主要内容,如果未能解决你的问题,请参考以下文章