2012-02-25 16 views
1

PHPでランダムなintと文字列を作成したいので、mcrypt_create_ivを使うことにしました。マニュアルではランダム性のために/ dev/randomと/ dev/urandomを使用していますが、この関数を使用してランダムなIntとStringを生成する方法に関する簡単なチュートリアルは見つかりません。私はいくつかのコードを試しましたが、この機能は私に読めない文字を与えます。ですから、私がそれをいかに適切に使用できるかの簡単な例を教えてください。あなたは乱数を生成したい場合はphp using mcrypt_create_iv

+2

'mcrypt_create_iv'の目的はランダムな文字列を生成しないことです。その目的は、暗号化初期化ベクトル(したがって、* mcrypt *と* iv *)を生成することです。 – netcoder

+0

mcrypt_create_ivの出力でbase64_encodeを実行することも、より小さい文字セットを使用する場合にはオプションになります。 – yoshiwaan

答えて

5

mt_rand使用:

$random = mt_rand(0, 999999); 
$random_string = sha1($random); 

mcrypt_create_ivがで使用されている:あなたは、文字列をしたい場合は、ハッシュ関数による結果の整数を渡すことができ

$random = mt_rand(0, 999999); 

暗号化。それはあなたの要求に全く無関係です。その後、10は長さである

$random = file_get_contents('/dev/urandom', false, null, 0, 10); 

...、変換:

あなたはセキュリティコンポーネント(塩、パスワードなど)、そのよう/dev/urandomから読んでランダムな文字列を使用するように探しているなら;

$string = bin2hex($random); 
$number = current(unpack('L', $random)); 
+0

mt_randは安全ではありません!!!!!!!!!!!!!私は/ dev/randomまたは/ dev/urandomを使用したいと思います。 – Irakli

+0

Googleとあなたはphp gurusがそれが安全な方法ではないと言っています。唯一の安全な方法は、/ dev/urandomを使用することです。 – Irakli

+4

@ user1228636:安全性は相対的です。あなたが望むものは言及していないので、そうしないと、あなたの基準にしたがって安全であるかどうかは気にしません。あなたは乱数が欲しいですか? 'mt_rand'を使います。 '/ dev/urandom'から読み込みたいだけです。 – netcoder

0

ランド(int型$分、int型の$ max)の乱数用と文字列は、乱数のMD5またはSHA1ハッシュを取るためにこれを使用します。このような

+0

私は/ dev/urandomを使用したいのは、最も安全な方法だからです。その方法はまったく安全ではありません – Irakli

7

まず、どのようにランダムな文字列を使用したいのですか。何のために使用しますか?パスワード用の塩を生成する場合は、この関数を使用してuniqid()またはmt_rand()によって生成されたものよりも優れたランダムな文字列を生成できます。 Secure Password Hashingを参照し、mcrypt_create_iv()を使用してランダムな文字列を生成する方法については、以下のコードを参照してください)。あなたの代わりにUUIDを試してみてください。 mcrypt_create_ivを単独で使用すると、読めない文字が生成されます。このような何か読みやすい使用にBIN2HEX関数をそれらの読めない文字を「変換」するには、次の

$random_string = bin2hex(mcrypt_create_iv(30, [MCRYPT_DEV_RANDOM|MCRYPT_DEV_URANDOM|MCRYPT_RAND])); 

「30」は、あなたが取得したい初期化ベクトルの大きさです。 5.3.0リリースより古いバージョンのWindowsマシンでは、MCRYPT_DEV_URANDOMおよびMCRYPT_DEV_RANDOMを使用することはできません。代わりにMCRYPT_RANDを使用してください。

+0

ありがとうございます、あなたは簡潔できれいな例を入れた最初です、私はウェブ上の任意のものを見つけることができません。 – Lyoneel