SQL SHA1内所
-
05-09-2019 - |
質問
私のプログラムを記憶していて、ユーザーの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のために例えば?