https://www.lynahex.com/index.php/archives/Cracking-Random-Number-Generator2.html
<CodeIssue>
<Priority>3</Priority>
<Severity>Medium</Severity>
<Title>mt_rand</Title>
<Description>The application uses pseudo-random number generation that is not cryptographically secure. Carry
out a manual check to ensure this is not being used in a process that requires cryptographically secure
random numbers.
</Description>
<FileName>\WWW\user.php</FileName>
<Line>881</Line>
<CodeLine>$smarty->assign('rand', mt_rand());</CodeLine>
<Checked>False</Checked>
<CheckColour>LawnGreen</CheckColour>
</CodeIssue>
[PHP]利用openssl_random_pseudo_bytes和base64_encode函数来生成随机字符串
openssl_random_pseudo_bytes函数本身是用来生成指定个数的随机字节,因此在使用它来生成随机字符串时,还需要配合使用函数base64_encode。如下所示:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
在调用base64_encode函数之后,还对结果进行了一次替换操作,目的是要去除随机生成的字符串中不需要的字符。
当然,在使用openssl_random_pseudo_bytes函数之前,最好使用function_exists来确保该函数在运行时是可用的。如果不可用,则使用Plan B:
- 1
这个函数的通用性很强,可以根据业务的需要进行适当修改然后当作静态方法进行调用。