2

私のプログラムでは、ユーザーの IP アドレスをレコードに保存します。レコードのリストをユーザーに表示するとき、他のユーザーの IP を教えたくないので、SHA1 ハッシュします。次に、ユーザーがレコードをクリックすると、次のような URL に移動します。

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

ここで、SHA1 ハッシュで指定された IP アドレスごとにすべてのレコードを一覧表示する必要があります。私はこれを試しました:

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

しかし、これは機能しません。どうすればいいですか?
ありがとう、アイザック・ウォーラー

4

6 に答える 6

8

問題があるかどうかはわかりませんが、SHA1ハッシュda39a3ee5e6b4b0d3255bfef95601890afd80709は空の文字列の既知のハッシュです。

それは単なる例IPですか、それともハッシュ計算関数に実際のアドレスを提供するのを忘れていましたか?

アップデート:

あなたの Web ページ コードSHA1は小文字のハッシュを生成しますか?

このチェックは次の場合に失敗しMySQLます:

SELECT  SHA1('') = 'DA39A3EE5E6B4B0D3255BFEF95601890AFD80709'

この場合、これを使用します。

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

、成功します。

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になるため、このクエリは高速に動作します。

于 2009-05-23T19:12:26.723 に答える
4

クエリが

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

次に、SHA1 計算がコード内の1 つの場所で正確に行われるようにして、複数の場所でわずかに異なる方法で行われる機会がないようにします。これにより、ソルトを計算に混ぜる機会も得られます。これにより、誰かが興味のある IP アドレスの SHA1 を単純に計算して、それを手で渡すことができなくなります。

SHA1 ハッシュをデータベースに格納すると、ip_sha1 にセカンダリ インデックスを追加して、その SELECT を高速化することもできます。非常に大きなデータ セットがある場合、WHERE 句で SHA1 を実行すると、データベースは完全なテーブル スキャンを強制的に実行し、スキャンごとにすべてのレコードの計算をやり直します。

于 2009-05-23T18:52:38.403 に答える
3

簡単に考えてみると、これは非常に単純な難読化です。考えられる IP アドレスは 2 32 個しかないため、技術的な知識を持つ誰かがそれを理解したい場合、40 億のハッシュすべてを計算することでそれを行うことができますが、それほど時間はかかりません. これらの IP アドレスの機密性に応じて、プライベート ルックアップ テーブルを検討することをお勧めします。

于 2009-05-23T19:42:07.273 に答える
3

予期しないハッシュの不一致が発生するたびに、" \n" などの空白を含む文字列を誤ってハッシュしたことが原因でした。

于 2009-05-23T18:39:24.773 に答える
0

最終的に IP アドレスを暗号化し、別のページで復号化しました。次に、SQL クエリで生の IP アドレスを使用できます。また、オートクラシーが言ったように、ブルート フォース攻撃から保護します。

于 2009-05-23T19:56:46.387 に答える
0

ハッシュ アルゴリズムの出力を MySQL の SHA1() の出力と比較しましたか? たとえば、IP アドレス 1.2.3.4 の場合は?

于 2009-05-23T18:38:29.177 に答える