2017-06-03 13 views
0

我正在查看當前的數據庫設置,它由大約7個不同表中的用戶完整家庭地址組成,所有數據都有不同程度的不一致數據(由於方式例如,人們可以輸入帶有/不帶空格的郵政編碼)。PHP/MySQL:散列公用數據

有問題的應用程序還沒有生效 - 即將完成但尚未完成,因此現在的任何變化都比在表格中存在大量數據時的6個月後要容易得多。

我花了幾個小時重構處理用戶家庭地址的代碼/數據庫,而不是每次都使用哈希算法插入完整的數據庫嗎? 這會給我們帶來更大的一致性,顯然可以通過用戶可以共享地址哈希的方式進行設置,因此我們甚至可以通過地址更容易地搜索它們。

我們目前使用這種方法來存儲用戶代理 - 散列UA字符串並將其存儲在它自己的獨立表中,並與實際UA字符串一起放入中等文本列中,然後將UA哈希存儲在需要它(見下文),並使用SHA1。然而,在基於非碰撞的散列方面,我可以選擇哪些選項,但是您也看到在中小規模生產環境中以最快的時間執行?

UA String Hash Table

這意味着兩個明顯的,MD5/SHA1是100%不會發生了,我真的不與哈希比不幸更大的工作。 爲了記錄,對於密碼加密我使用password_hash所以不要嚇壞了!

很明顯,用戶的家庭住址比用戶代理字符串重要得多,這就是爲什麼我問你會推薦什麼。

謝謝

+0

「基於非碰撞的哈希」 - 你是什麼意思?兩個不同字符串的哈希值應該永遠不會相等? –

+0

@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

+0

我不是專家,但AFAIK這些功能只存在於預先設定的字符串集合中。但爲什麼你不使用主鍵作爲參考? –

回答

0

對於那些你想知道的,我去了SHA256。

沒料到居然還有OpenSSL中的基準散列算法的功能,它可以像使用:openssl speed alg1 alg2 alg3 etc

綜觀下表中的64/256字節的結果,但是,顯然不執行速度與MD5/SHA1一樣快,但我仍然決定其仍然足夠快速生產。

我以爲我會發布這個,讓任何不知道openssl speed的人都去了。

[[email protected] ec2-user]# openssl speed md5 sha1 sha256 sha512 
Doing md5 for 3s on 16 size blocks: 9785239 md5's in 3.00s 
Doing md5 for 3s on 64 size blocks: 7076501 md5's in 2.99s 
Doing md5 for 3s on 256 size blocks: 3832312 md5's in 3.00s 
Doing md5 for 3s on 1024 size blocks: 1363911 md5's in 3.00s 
Doing md5 for 3s on 8192 size blocks: 194888 md5's in 3.00s 
Doing sha1 for 3s on 16 size blocks: 10839355 sha1's in 3.00s 
Doing sha1 for 3s on 64 size blocks: 7479305 sha1's in 2.99s 
Doing sha1 for 3s on 256 size blocks: 4024302 sha1's in 3.00s 
Doing sha1 for 3s on 1024 size blocks: 1478185 sha1's in 3.00s 
Doing sha1 for 3s on 8192 size blocks: 227631 sha1's in 3.00s 
Doing sha256 for 3s on 16 size blocks: 7984178 sha256's in 3.00s 
Doing sha256 for 3s on 64 size blocks: 4370920 sha256's in 3.00s 
Doing sha256 for 3s on 256 size blocks: 1904856 sha256's in 3.00s 
Doing sha256 for 3s on 1024 size blocks: 589307 sha256's in 3.00s 
Doing sha256 for 3s on 8192 size blocks: 77639 sha256's in 2.99s 
Doing sha512 for 3s on 16 size blocks: 6481869 sha512's in 3.00s 
Doing sha512 for 3s on 64 size blocks: 6479426 sha512's in 3.00s 
Doing sha512 for 3s on 256 size blocks: 2425680 sha512's in 3.00s 
Doing sha512 for 3s on 1024 size blocks: 869702 sha512's in 3.00s 
Doing sha512 for 3s on 8192 size blocks: 120660 sha512's in 3.00s 


The 'numbers' are in 1000s of bytes per second processed. 
type    16 bytes  64 bytes 256 bytes 1024 bytes 8192 bytes 
md5    52187.94k 151470.26k 327023.96k 465548.29k 532174.17k 
sha1    57809.89k 160092.15k 343407.10k 504553.81k 621584.38k 
sha256   42582.28k 93246.29k 162547.71k 201150.12k 212715.28k 
sha512   34569.97k 138227.75k 206991.36k 296858.28k 329482.24k 
[[email protected] ec2-user]#