0

我需要创建一个自动生成的密钥并通过邮件发送以进行注册过程。密钥的长度应至少为 50 个字符(如 facebook Appid),并且必须是唯一的。我使用 php 技术和 mysql 作为数据库。

我是 php 新手,需要帮助。

4

4 回答 4

3

正好 50 个字符和密码安全的字符串使用。

openssl_random_pseudo_bytes(50);
于 2013-08-13T09:17:35.793 回答
0

您不需要在确认码中包含用户名等。您只需要一个随机字符串。这是一个将为您生成加密安全字符串的函数。

function random_string($length = 50)
{
    $bytes = openssl_random_pseudo_bytes($length * 2);
    return substr(str_replace(array('/', '+', '='), '', base64_encode($bytes)), 0, $length);
}
于 2013-08-13T09:21:27.023 回答
0

您可以从任何字符串生成哈希。

只要源字符串是唯一的,散列也是唯一的。

例如,您可以使用带有用户 ID 的铭文时间戳(以避免在同一秒内有 2 个用户注册的情况下重复),然后使用任何散列函数(md5 用于 32 个字符,sha1 用于 40,另一个用于 50)

unqid 是从当前时间生成的,并且是唯一的(99.99% 的时间,因为如果在同一微秒内调用 uniqid 可能会发生冲突)。

openssl_random_pseudo_bytes 可能会生成随机字符串,但在文档中对实现的指定不够充分,无法确定碰撞风险。您需要使用 bin2hex 将其转换为更标准的字符串,以便在 url 中安全使用。

于 2013-08-13T09:23:15.787 回答
0

您可以使用此功能来做到这一点

function genRandomString()    {        $length = 10;   
$characters = "0123456789abcdefghijklmnopqrstuvwxyz";      
$string ="" ;             
for ($p = 0; $p < $length; $p++) {       
    $string .= $characters[mt_rand(0, strlen($characters))];      
}       

return $string;    

}

您可以使用任意数量的长度

于 2013-08-13T09:26:33.430 回答