php使用mcrypt_create_iv

Ira*_*kli 1 php string random int mcrypt

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

Sah*_*ure 7

首先,你想如何使用随机字符串,你想用它们做什么?如果它是为密码生成盐,您可以使用此函数生成比uniqid()或mt_rand()生成的更好的随机字符串.请参阅安全密码散列,并参阅下面的代码,了解如何使用mcrypt_create_iv()生成随机字符串.如果您想要用于用户识别的字符串,为什么不尝试使用UUID.单独使用mcrypt_create_iv只会生成不可读的字符.要将那些不可读的字符"转换"为可读的字符,请使用bin2hex函数,如下所示:

$random_string = bin2hex(mcrypt_create_iv(30, [MCRYPT_DEV_RANDOM|MCRYPT_DEV_URANDOM|MCRYPT_RAND]));
Run Code Online (Sandbox Code Playgroud)

"30"是您想要获得的初始化向量的大小.请记住,在具有早于5.3.0版本的PHP版本的Windows计算机上使用MCRYPT_DEV_URANDOM和MCRYPT_DEV_RANDOM将不起作用.对于这种情况,请使用MCRYPT_RAND.


net*_*der 5

如果要生成随机数,请使用mt_rand:

$random = mt_rand(0, 999999);
Run Code Online (Sandbox Code Playgroud)

如果需要字符串,可以通过散列函数传递结果整数:

$random = mt_rand(0, 999999);
$random_string = sha1($random);
Run Code Online (Sandbox Code Playgroud)

mcrypt_create_iv用于密码学.这与您的要求完全无关.

如果您希望在安全组件(盐,密码等)中使用随机字符串,请阅读/dev/urandom如下:

$random = file_get_contents('/dev/urandom', false, null, 0, 10);
Run Code Online (Sandbox Code Playgroud)

... 10长度在哪里,然后像这样转换:

$string = bin2hex($random);
$number = current(unpack('L', $random));
Run Code Online (Sandbox Code Playgroud)

  • @ user1228636:安全是相对的.你没有提到你想要的东西,所以除非你这样做,否则根据你的标准我不关心它是否安全.你想要随机数吗?使用`mt_rand`.你想从`/ dev/urandom`读取,只需读取它. (4认同)