在python中,将某些数据散列为虚拟的防碰撞密钥(大概为128位左右)是什么合适的方法?系统仍使用Python 2.7。
我正在研究hashlib的Sha1和MD5,但是很难找到与安全无关的这些哈希信息。
我只需要一些东西:
这就是我最后要做的。
我喜欢对这样的东西进行base64编码,因为它通过将字符集减少为大多数地方可以接受/兼容的字符集而避免了问题,而不会像十六进制编码那样过度膨胀键的大小。您永远都不知道将来要在哪个位置粘贴此ID /密钥。
我在最后删除了'='符号,因为有时它会导致URL问题。从数学上讲,这使id更有可能发生冲突,因为'='表示信息。但是我认为剩下的数据足以防止冲突,特别是因为sha1是160位而不是128位。UUID是128字节,因为尽管从技术上讲可能会发生UUID冲突,但实际发生的几率如此之小几乎不可能发生冲突(这是假设您使用具有良好随机分布的良好哈希算法)。
import hashlib
import base64
def get_key(raw_text):
m = hashlib.sha1()
m.update(raw_text)
raw_bytes_key = m.digest()
key = base64.urlsafe_b64encode(raw_bytes_key).replace('=', '')
return key