回答
取決於你的意思。
如果由於重新散列造成散列發生變化,那麼是的,如果沒有,那麼沒有。
如果對象沒有改變,而你重新哈哈哈哈,它會保持相同的散列。例如,字符串teststring
的md5散列將始終爲D67C5CBF5B01C9F91932E3B8DEF5E5F8
。
但是,如果對象發生變化並因此重新哈希,您將得到一個新的哈希值。
現在,如果您重新刷新發生更改的對象,則碰撞可能性會更高。
舉個例子,你有一個非常簡單的對象,它只包含一個整數值和一個非常簡單的散列算法,它只需要這個值,並對它做一個modulo 20
。這只是針對這個例子的一個故意的散列算法。
現在說你有兩個包含隨機數的對象。這兩個值的哈希碰撞的機會是1/20
,因爲哈希算法中有20個存儲桶。
如果您現在重新組合,您將再次有機會碰撞或碰撞的機率爲19/20
。
因此n
rehashes之後沒有碰撞的機會是(19/20)^(n+1)
。所以在第一次重新散列之後(所以你有你的原始值,並且在它改變之後重新刷新其中的一個值),你有沒有碰撞的90.25%
機會。在第二次重新刷新之後,你有可能不會碰到任何碰撞的85.76%
。經過100次重新編譯後,你只有一個不會碰撞的機會。
這完全取決於在每次重新散列之前,這些值會變爲新值。
另一種方式來證明是這樣的:
- 散列算法給你的桶數量有限(=不同的可能哈希值)
- 你可以用不同的值 無限量餵你的哈希算法
- 每個值都需要映射到存儲桶
- 如果您將無限量的值映射到有限數量的存儲桶,則某些時候會出現衝突。
你是什麼意思「改變因爲改變」?結果哈希? –
是的。如果以相同的方式重新提供相同的值,則始終會得到相同的散列值。如果你在對象改變後重新哈希,你會得到一個不同的散列,然後它會改變散列。我會將其添加到答案中。 – Dakkaron
我的意思是:當我散列一個對象然後散列散列(多次)時,與其他對象散列衝突的機會是否以相同的方式散列(多次),變得更高? –
- 1. 如果我散列一堆散列,散列衝突的可能性有多大?
- 2. 散列 - 目的衝突
- 3. SHA計算隨機長度的散列
- 4. C#散列與衝突域
- 5. 故意散列衝突
- 6. 用戶名散列中的MD5散列衝突
- 7. 避免散列衝突的獨立鏈散列
- 8. 如何隨機散列(Java)?
- 9. 隨機鹽散列BCript
- 10. 減少SHA1散列的部分衝突
- 11. 查找散列表中的衝突
- 12. N-1衝突的散列函數?
- 13. 隨着目標集合的增長,循環散列可以保持一致嗎?
- 14. 谷歌圖表隨着地理散列
- 15. 散列表和處理衝突
- 16. Set如何解決散列衝突?
- 17. 散列衝突如何處理?
- 18. 散列衝突和附加數據
- 19. 加快散列,減少衝突?
- 20. 在兩次選擇散列中期望的一對衝突
- 21. 增加散列值
- 22. 隨機的1對1散列函數
- 23. 散列散列的紅寶石散列
- 24. 使用SHA-256散列圖像字節會產生很多隨機衝突,我做錯了什麼?
- 25. PHP5有效的散列生成與最小(無)衝突的機會
- 26. 如何快速散列非常大的子串而不會發生衝突?
- 27. 在C#中隨機鹽散列?
- 28. 如何用隨機鹽散列密碼?
- 29. 散列令牌的隨機數據是否會增加安全性?
- 30. Perl - 散列散列(散列和標量)?
爲什麼downvote? –