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