我正在查看當前的數據庫設置,它由大約7個不同表中的用戶完整家庭地址組成,所有數據都有不同程度的不一致數據(由於方式例如,人們可以輸入帶有/不帶空格的郵政編碼)。PHP/MySQL:散列公用數據
有問題的應用程序還沒有生效 - 即將完成但尚未完成,因此現在的任何變化都比在表格中存在大量數據時的6個月後要容易得多。
我花了幾個小時重構處理用戶家庭地址的代碼/數據庫,而不是每次都使用哈希算法插入完整的數據庫嗎? 這會給我們帶來更大的一致性,顯然可以通過用戶可以共享地址哈希的方式進行設置,因此我們甚至可以通過地址更容易地搜索它們。
我們目前使用這種方法來存儲用戶代理 - 散列UA字符串並將其存儲在它自己的獨立表中,並與實際UA字符串一起放入中等文本列中,然後將UA哈希存儲在需要它(見下文),並使用SHA1。然而,在基於非碰撞的散列方面,我可以選擇哪些選項,但是您也看到在中小規模生產環境中以最快的時間執行?
這意味着兩個明顯的,MD5/SHA1是100%不會發生了,我真的不與哈希比不幸更大的工作。 爲了記錄,對於密碼加密我使用password_hash
所以不要嚇壞了!
很明顯,用戶的家庭住址比用戶代理字符串重要得多,這就是爲什麼我問你會推薦什麼。
謝謝
「基於非碰撞的哈希」 - 你是什麼意思?兩個不同字符串的哈希值應該永遠不會相等? –
@PaulSpiegel你是對的,他們不應該,但有些情況下MD5/SHA1不是這樣的。 [Wiki - 更多信息](https://en.wikipedia.org/wiki/Collision_attack)。另請參閱[MD5碰撞示例](http://www.mathstat.dal.ca/~selinger/md5collision/)和[SHA1碰撞](https://www.theregister.co.uk/2017/02/23/ google_first_sha1_collision /) – DomLip
我不是專家,但AFAIK這些功能只存在於預先設定的字符串集合中。但爲什麼你不使用主鍵作爲參考? –