我正在抓取一些网站的特殊项目并将它们存储在MongoDB服务器中。为了避免重复项,我使用项链接的哈希值。这是我从链接生成哈希的代码:
var worksheet =
Globals.ThisWorkbook.Worksheets.Cast<Worksheet>()
.Where(w => w.Name == "worksheet_name")
.ToList();
我不知道import hashlib
from bson.objectid import ObjectId
def gen_objectid(link):
"""Generates objectid from given link"""
return ObjectId(hashlib.shake_128(str(link).encode('utf-8')).digest(12))
# end def
算法是如何工作的。这就是我的问题所在。
可以使用这种方法吗?我可以安全地假设碰撞的概率可以忽略不计吗?
更好的方法是什么?
答案 0 :(得分:0)
shake_128
是SHA-3哈希算法之一,它是比赛的结果,被选为下一代安全哈希算法。由于SHA-2在大多数情况下仍然足够好,因此并未得到广泛使用。由于这些算法是专为加密安全的哈希而设计的,因此对于您正在做的事情来说应该算是过高了。顾名思义,shake_128
还应为您提供128位值,即16个字节,而不是12个字节。这为您提供2^128 = 3.4e38
个不同的哈希值。我想你会没事的。如果有的话,我会说您可以使用更快的哈希算法,因为在这种情况下您不需要密码安全性。