【发布时间】:2010-10-12 20:15:26
【问题描述】:
我希望创建一个可重用的函数,该函数将生成一个随机密钥,其中包含选定长度的可打印 ACSII 字符(从 2 到 1000+)。我认为可打印的 ASCII 字符将是 33-126。它们的密钥不需要完全唯一,只要在完全相同的毫秒内生成即可(因此uniqid() 不起作用)。
我认为chr() 和mt_rand() 的组合可能会起作用。
这是要走的路,还是其他最好的方法?
编辑: uniqid() 也不起作用,因为它没有长度参数,它只是 PHP 给你的。
我的想法:这是我的想法:
function GenerateKey($length = 16) {
$key = '';
for($i = 0; $i < $length; $i ++) {
$key .= chr(mt_rand(33, 126));
}
return $key;
}
这有什么问题吗?
另一个编辑:其他大多数问题都与密码生成有关。我想要更多种类的角色,我不在乎 1 与 l。我希望尽可能多的可能键。
注意:生成的密钥不一定是加密安全的。
【问题讨论】:
-
随机数生成器通常不保证唯一性,即使“以完全相同的毫秒生成”。为了保证唯一性,您需要能够检测到碰撞。
-
添加了有关安全性的重大警告,否则我将不得不对每个答案投反对票。请注意,答案中的某些函数返回二进制,其他返回十六进制,其他 base64 等。
-
如果您真的想要所有 ASCII 可打印字符,
Random::asciiPrintableString($length)正是您所需要的。如果您只需要字母和数字,请改用Random::alphanumericString($length)。