質問

私のプログラムを記憶していて、ユーザーのIPアドレスを入力します。た場合のリストを表示するレコードのユーザーにならないようにしたい。って非常に良い流れだったと思い、他のユーザーのIPいSHA1ハッシュします。そして、ユーザが記録では、URLのようになります:

http://www.example.com/allrecordsbyipaddress.php?ipaddress=SHA1HASHOFTHEIPADDRESS

今、必要なリストは、すべてのデータには、IPアドレスで指定されたSHA1ハッシュ.やってみると:

SELECT * FROM records 
WHERE SHA1(IPADDRESS)="da39a3ee5e6b4b0d3255bfef95601890afd80709"

われていないわけではありません。方法を教えてくださいるのか?
おかげさ Isaac Waller

役に立ちましたか?

解決

クエリがなるように、

私は、生のIPと一緒にデータベースにIPのSHA1を保存したい。

SELECT * FROM records WHERE ip_sha1 = "..."

それから私はSHA1の計算が発生していることを確認したいの正確に一つの場所のコードでは、それが複数の場所で異なってわずかに行うことができるために機会がありませんように。誰かが単に彼らが興味を持っているIPアドレスにSHA1を計算し、手でそれを渡すことができないように、それはまた、あなたの計算に塩を混合する機会を与えてくれます。

そのSELECTをスピードアップするために、データベースはまた、あなたのip_sha1にセカンダリインデックスを追加するための機会を与えるSHA1ハッシュを保存します。あなたは非常に大規模なデータセットを持っている場合は、WHERE句でSHA1を行うと、スキャンごとにすべてのレコードに対して計算をやり直すと一緒に、完全なテーブルスキャンを行うためのデータベースを強制ます。

他のヒント

知らない事項が SHA1 ハッシュ da39a3ee5e6b4b0d3255bfef95601890afd80709 るのであれハッシュの空の文字列が返されます。

では、例えば、お忘れを実 IP アドレスのハッシュ計算機能しているのでしょうか。

更新:

あなたのページのコード生成 SHA1 ハッシュが小文字?

このチェックに失敗し MySQL:

SELECT  SHA1('') = 'DA39A3EE5E6B4B0D3255BFEF95601890AFD80709'

この場合、使用す:

SELECT  SHA1('') = LOWER('DA39A3EE5E6B4B0D3255BFEF95601890AFD80709')

, し、成功します。

また、precalculateの SHA1 ハッシュを挿入する時の記録にテーブル:

INSERT
INTO    ip_records (ip, ip_sha)
VALUES  (@ip, SHA1(CONCAT('my_secret_salt', @ip))

SELECT  *
FROM    ip_records
WHERE   ip_sha = @my_salted_sha1_from_webpage

この戻りますの IP を割り出しの ip_sha, ここのクエリーです。

私は予想外のハッシュの不一致を持っていたたびに、私は偶然、このような「\n」など、いくつかの空白を、含まれた文字列をハッシュ化されたので、それがあった。

だけで簡単に考えた:それは非常に単純な難読化です。わずか2 32 の可能なIPアドレスは、技術的な知識を持つ誰かがそれを把握したかったので、もし、彼らは非常に長い時間はかからないだろう、すべての40億個のハッシュを計算することにより、それを行う可能性があります。これらのIPアドレスの感度に応じて、プライベートルックアップテーブルを検討する必要があります。

あなたは)MySQLのSHA1(の出力を使用してハッシュアルゴリズムの出力を比較しましたか? IPアドレス1.2.3.4のために例えば?

私は、IPアドレスを暗号化し、他のページにそれらを解読することになりました。その後、私はちょうどSQLクエリで生のIPアドレスを使用することができます。専制には言っhref="https://stackoverflow.com/questions/902129/sql-sha1-inside-where/902305#902305">また、

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top