php使用mcrypt_create_iv

时间:2012-02-25 18:40:30

标签: php string random int mcrypt

我想在PHP中创建一个随机的整数和字符串,所以我决定使用mcrypt_create_iv。它是用手写的,它使用/ dev / random和/ dev / urandom来实现随机性,但我找不到一个关于如何使用这个函数生成随机Int和String的简单教程。我尝试了一些代码,但是这个函数给了我不可读的字符。那么请你给我一个简单的例子说明我可以正确使用它吗?

3 个答案:

答案 0 :(得分: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版本的PHP版本的Windows计算机上使用MCRYPT_DEV_URANDOM和MCRYPT_DEV_RANDOM将不起作用。对于这种情况,请使用MCRYPT_RAND。

答案 1 :(得分: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));

答案 2 :(得分:0)

rand(int $ min,int $ max)将此值用于随机数,而字符串则使用随机数的md5或sha1哈希值;