2012-02-25 2 views
1

Я хочу создать случайные ints и строки в PHP, поэтому я решил использовать mcrypt_create_iv. В руководстве написано, что он использует/dev/random и/dev/urandom для случайности, но я не могу найти простой учебник о том, как генерировать случайные Int и String, используя эту функцию. Я пробовал код, но эта функция дает мне нечитаемые символы. Поэтому, пожалуйста, вы можете дать мне простой пример того, как правильно я могу его использовать?php using mcrypt_create_iv

+2

Цель 'mcrypt_create_iv' - не создавать случайные строки. Его целью является создание криптографического вектора инициализации (следовательно, * mcrypt * и * iv *). – netcoder

+0

Запуск base64_encode на выходе mcrypt_create_iv также является опцией, если вы хотите использовать меньший набор символов. – yoshiwaan

ответ

5

Если вы хотите, чтобы генерировать случайные числа, используйте mt_rand:

$random = mt_rand(0, 999999); 

Если вы хотите строку, вы можете передать полученное число через хэш-функции:

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

mcrypt_create_iv используется в криптография. Это совершенно не связано с вашим требованием.

Если вы хотите, чтобы использовать случайную строку в компонентах безопасности (соли, пароли и т.д.), читать /dev/urandom так:

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

... где 10 длина, а затем преобразовать как это:

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

mt_rand НЕ безопасен !!!!!!!!!!!!! Я хочу использовать/dev/random или/dev/urandom – Irakli

+0

Google, и вы обнаружите, что гуру php говорят, что это НЕ безопасный метод. Единственный безопасный метод - использование/dev/urandom – Irakli

+4

@ user1228636: Безопасность относительна. Вы не упомянули о том, чего хотите, поэтому, если вы этого не сделаете, мне все равно, безопасно это или нет в соответствии с вашими стандартами. Вам нужны случайные числа? Используйте 'mt_rand'. Вы хотите читать из '/ dev/urandom', просто прочитайте его. – netcoder

0

рандов (интермедиат $ мин, Int макс $) использовать это для случайных чисел и строк взять 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])); 

The «30» является размером вектора инициализации, который вы хотите получить. Помните, что использование MCRYPT_DEV_URANDOM и MCRYPT_DEV_RANDOM на машинах Windows с версиями PHP старше версии 5.3.0 не будет работать. Вместо этого используйте MCRYPT_RAND для таких случаев.

+0

Благодарим вас, вы первый, кто поставил краткий и чистый пример, я не могу найти его в Интернете. – Lyoneel