0

私はボードを持っていますが、代わりに登録を無効にしたいのですが、ユーザーが IP アドレスに基づく一意の ID を使用して自由に投稿できるようにしたいのです。

例えば:

「Joe」の IP が 200.100.15.117 の場合、「Joe」のニックネームは 200.100.15.117 のハッシュ関数になります。

「Joe」の IP が変更された場合、彼は別の ID を取得しますが、それは問題ではありません。IP アドレスごとに 1 つの一意の ID だけが必要です

また、次の 2 つの重要な点があります。

  • 一意の ID は 8 文字にする必要があります
  • ハッシュは安全でなければなりません。ハッカーにユーザーの IP アドレスをクラックさせたくありません

MD5 関数を使用して 8 文字にトリミングすることを考えましたが、それはどのようにユニークですか? より良い方法はありますか?

4

4 に答える 4

2

IP アドレス文字列を LONG(4 バイト) に変更して、次に必要なことを行うことができます。

PHP関数ip2longを参照してください。

于 2012-10-29T09:15:21.733 に答える
1

これは、同じネットワーク上で2人を実際に区別できないため、そこに投稿して、寮の隣人がサイトにアクセスすると、サイトは彼が私であると見なします。

Cookieの使用を検討する必要があります。Cookieは簡単に一意にすることができ、AFAIKをリモートでハッキングすることはできません。

一意のIDの部分については、「ユーザー」をデータベースに保存している場合は、「ユーザー」テーブルから主キーを割り当てて、それをCookieで使用できます。

8文字の長さである必要がある場合は、IDの前に0を付けることができます(例:00000001、00000002 ....少なくともこのように一意で、8文字の長さ)。

于 2012-10-29T09:07:17.977 に答える
0

編集この回答に関するOPコメントによると。

以下のコードは、BC Math ライブラリを使用して MD5 ハッシュを Base-90 文字列に変換します。これは、32 文字の文字列を 20 文字の文字列に変換します。これは望ましい 8 文字とはかけ離れていますが、ASCII 範囲を使用した最小文字列長です (文字を使用してベースを Base-94 に増やすことは可能です' " \ [space]が、これは文字列の長さに影響せず、代わりにデータの処理中に問題が発生する可能性があります)。 .

$ip      = '200.100.15.117';
$hash    = md5($ip);
$chars16 = array(
    '0' => 0,  '1' => 1,  '2' => 2,  '3' => 3, '4' => 4,  '5' => 5,
    '6' => 6,  '7' => 7,  '8' => 8,  '9' => 9, 'a' => 10, 'b' => 11,
    'c' => 12, 'd' => 13, 'e' => 14, 'f' => 15
);
$base10 = '0';
for ($i = strlen($hash) - 1; $i > 0; $i--) {
    $base10 = bcadd($base10, bcmul($chars16[$hash[$i]], bcpow(16, $i)));
}
$chars   = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,;.:-_+*?!$%&@#~^=/<>[](){}`';
$base    = (string)strlen($chars);
$baseX   = '';
while (bccomp($base10, $base) === 1 || bccomp($base10, $base) === 0) {
    $baseX  = substr($chars, bcmod($base10, $base), 1) . $baseX;
    $base10 = preg_replace('/\.\d*$/', '', bcdiv($base10, $base));
}
$baseX = substr($chars, $base10, 1) . $baseX;
echo $baseX; // Shows: 1BS[JdZf/7J$J{ud&r5i
于 2012-10-29T11:12:32.957 に答える
0

たとえば、IPアドレスをソルトできます

$salt = "e45re%$#";
$ip = "200.111.123.111";
$hash = md5($ip.$salt);

$hash = substr($hash,0,8); 
于 2021-03-10T13:21:43.960 に答える