2017-06-03 5 views
0

現在のデータベースの設定を見ていて、7つの異なるテーブルにある愚かな量のユーザ完全なホームアドレスで構成されています。人々は、例えば、スペースの有無にかかわらず、郵便番号をタイプすることができる)。PHP/MySQL:共通のデータをハッシュする

問題のアプリケーションはまだ完全には完結していませんが、まだライブではないため、テーブルにばかげた量のデータがある場合は、6か月以内に変更するとかなり簡単になります。

ハッシュアルゴリズムを使用して、毎回完全なものを挿入するのではなく、ユーザーの自宅のアドレスを扱うコード/データベースをリファクタリングするのに2,3時間を費やす価値がありますか? これにより、一貫性が大幅に向上し、ユーザーがアドレスハッシュを共有できるようになるため、アドレスで検索することも簡単にできます。

現在、この方法を使用してユーザーエージェントを格納しています - 実際のUA文字列を移動するには、UA文字列をハッシュして独自の別のテーブルに格納し、代わりに必要なテーブルにUAハッシュを格納します(下記参照)、SHA1を使用します。しかし、非衝突ベースのハッシュの点で私にはどのようなオプションがありますか?中小規模の生産環境でできるだけ早く実行することも確認されていますか?

UA String Hash Table

これは、二つの明白なもの、MD5/SHA1は100%が起こっていない、と私は本当に、残念ながらそれよりも大きなハッシュでは動作しないことを意味します。 記録のために、パスワード暗号化のために私はpassword_hashを使用します。

明らかに、ユーザーの自宅の住所はユーザーエージェントの文字列よりも重要です。なぜなら、私はあなたに何をお勧めするのかを尋ねています。

おかげであなたは不思議の人のために

+0

"非衝突ベースのハッシング" - あなたはどういう意味ですか? 2つの異なる文字列のハッシュは決して等しくないはずですか? –

+0

@PaulSpiegel正しいですが、MD5/SHA1に該当しない場合があります。 [Wiki - その他の情報](https://en.wikipedia.org/wiki/Collision_attack) [MD5 Collision Example](http://www.mathstat.dal.ca/~selinger/md5collision/)と[SHA1 Collision](https://www.theregister.co.uk/2017/02/23/)も参照してください。 google_first_sha1_collision /) – DomLip

+0

私はエキスパートではありませんが、これらの関数はあらかじめ定義された文字列にしか存在しません。しかし、なぜプライマリキーを参照として使用しないのですか? –

答えて

0

は、私はSHA256と一緒に行きました。

私はopensslの中の関数は次のように使用することができますベンチマークハッシュアルゴリズムに実際にあります実現しなかった。明らかにそれはありませんが、以下の表の64/256バイトの結果を見るとopenssl speed alg1 alg2 alg3 etc

とにかく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]# 
関連する問題