dポイントプレゼントキャンペーン実施中!

プログラム初心者です

掲示板に2chのようなトリップをつけたいと思っています

md5など、わからないので教えてください

質問1
md5、sha1、sha256などありますがこれはサーバーが違うと別の結果になるのでしょうか?

質問2
md5でipから値を作るとプログラムわかる他の人に元のIPがわかってしまいますか?



$str = "127.0.0.1";

$str_md5 = substr(md5($str), 0, 30);
$date_md5 = substr(md5(date("Y-m-d")), 0, 20);
$key_md5 = substr(md5("samplekey"), 0, 10);

$id_md5 = md5($str_md5 . $date_md5 . $key_md5);
$id = substr(base64_encode($id_md5), 0, 8);

echo $id;


また、もっと良い方法があれば教えてください

よろしく願いします

A 回答 (4件)

訂正。

先頭2文字はソルトになるのでsubstrで取ってあげてください。

$elements = array(
$_SERVER['REMOTE_ADDR'],
date('Y-m-d', $_SERVER['REQUEST_TIME']),
'ユーザーが入力したキー',
);
$hash = substr(crypt(implode("\0", $elements), 'tY'), 2);
    • good
    • 0
この回答へのお礼

参考になりました。ありがとうございます

お礼日時:2014/02/12 21:54

md5やsha1で桁数を減らしてしまうと衝突する可能性が高まるので、cryptを使えばいいと思います。



$elements = array(
$_SERVER['REMOTE_ADDR'],
date('Y-m-d', $_SERVER['REQUEST_TIME']),
$key
);
$hash = crypt(implode("\0", $elements), 'tY');

こんな感じでどうぞ。
(最後の 'tY' 半角英数字と「スラッシュ」「ピリオド」から2文字を選択すれば何でもいいです)
    • good
    • 0
この回答へのお礼

回答ありがとうございます
いろいろやり方あるのですね
勉強になりました

お礼日時:2014/02/12 21:53

あ、失礼。



最後の「base64_encode」は問題ないです(ちょっと勘違い)。まぁ8桁あれば・・・いいかな(桁数にコストがかかるケースもあるだろうし)。
    • good
    • 0
この回答へのお礼

桁数はちょっとかんがえてみます

お礼日時:2014/02/12 21:52

>サーバーが違うと別の結果になるのでしょうか?



同じ形式を使えば同じ結果になります。

>ipから値を作るとプログラムわかる他の人に元のIPがわかってしまいますか?

普通は「プログラムがわかる」程度の人にはわかりません。また一般的には例示されたように日付や一種のキーも含めて計算させますから、まずわかりません。

http://ja.wikipedia.org/wiki/MD5


最後にbase64_encodeして8桁だけ取り出すのがなんか無駄に思えます。衝突の発生頻度が高くなりそうでいやだなぁ・・・
    • good
    • 0
この回答へのお礼

回答ありがとうございます
同じ値になるのですね。勉強になりました
>まずわかりません
安心しました。ありがとうございました

お礼日時:2014/02/12 21:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!