Php 如何为注册自动创建密钥(如FBAppid)?

Php 如何为注册自动创建密钥(如FBAppid)?,php,mysql,web,Php,Mysql,Web,我需要创建一个自动生成的密钥,并通过邮件发送注册过程。密钥长度至少应为50个字符(如facebook Appid),并且必须是唯一的。我使用php技术和mysql作为数据库 我是php新手,需要帮助。精确使用50个字符和加密安全的字符串 openssl_random_pseudo_bytes(50); 用于精确50个字符和加密安全的字符串使用 openssl_random_pseudo_bytes(50); 您不需要在确认代码中包含用户名等。您只需要一个随机字符串。这里有一个函数,它将为您生

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


我是php新手,需要帮助。

精确使用50个字符和加密安全的字符串

openssl_random_pseudo_bytes(50);

用于精确50个字符和加密安全的字符串使用

openssl_random_pseudo_bytes(50);

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

function random_string($length = 50)
{
    $bytes = openssl_random_pseudo_bytes($length * 2);
    return substr(str_replace(array('/', '+', '='), '', base64_encode($bytes)), 0, $length);
}

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

function random_string($length = 50)
{
    $bytes = openssl_random_pseudo_bytes($length * 2);
    return substr(str_replace(array('/', '+', '='), '', base64_encode($bytes)), 0, $length);
}

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

只要源字符串是唯一的,哈希也将是唯一的

例如,您可以使用带有用户id的时间戳(以避免在同一秒有2个用户注册时重复),然后使用任何哈希函数(md5表示32个字符,sha1表示40,另一个表示50)

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


openssl_random_pseudo_字节可能会生成随机字符串,但文档中没有对实现进行足够的指定,以确保冲突风险。您需要将其转换为一个更标准的带有bin2hex的字符串,以便在URL中安全使用。

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

只要源字符串是唯一的,哈希也将是唯一的

例如,您可以使用带有用户id的时间戳(以避免在同一秒有2个用户注册时重复),然后使用任何哈希函数(md5表示32个字符,sha1表示40,另一个表示50)

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


openssl_random_pseudo_字节可能会生成随机字符串,但文档中没有对实现进行足够的指定,以确保冲突风险。您需要使用bin2hex将其转换为更标准的字符串,以便在URL中安全使用。

您可以使用此函数

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

return $string;    
函数genRandomString(){$length=10;
$characters=“0123456789abcdefghijklmnopqrstuvxyz”;
$string=“”;
对于($p=0;$p<$length;$p++){
$string.=$characters[mt_rand(0,strlen($characters))];
}       
返回$string;
}


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

您可以使用此函数来执行此操作

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

return $string;    
函数genRandomString(){$length=10;
$characters=“0123456789abcdefghijklmnopqrstuvxyz”;
$string=“”;
对于($p=0;$p<$length;$p++){
$string.=$characters[mt_rand(0,strlen($characters))];
}       
返回$string;
}


u可以使用任意长度

如果你想满足40个,你可以使用
sha1
看看,你可以将电子邮件和用户名与返回的值连接起来,然后根据需要将其修剪为50个字符。你希望输出的具体内容是什么(“电子邮件、用户名等的组合”)生成这个时有什么问题?我认为密钥应该是随机的,而不是基于用户数据。如果它基于用户数据,则可以在您的应用程序之外进行计算,并可能被恶意使用。需要什么级别的安全性?如果您想要满足40,可以使用
sha1
查看,您可以将电子邮件和用户名与从中返回的值连接起来,然后根据需要将其修剪为50个字符。您希望输出的确切内容(“电子邮件、用户名等的组合”)以及生成此内容时遇到的问题?我认为密钥应该是随机的,而不是基于用户数据。如果它基于用户数据,则可以在应用程序之外进行计算,并可能被恶意使用。需要什么级别的安全性?
openssl\u random\u pseudo\u bytes
肯定比其他选项更严重。不过有一个问题:如果服务器以(不是那么)高的速度生成密钥,它很快就会耗尽其熵池…@Sylvain,因此你确实需要生成大量密钥(因为OP希望在注册时使用它…拜托,他不会有Facebook级别的注册数…)而且它仍然会给你比其他任何东西都更好的结果。@deceze“生成很多关键点”真的吗?我脑子里没有数字——但据我记忆所及,Linux的默认熵池大小是4096位,并且,根据所使用的算法,每个密钥消耗128到256位。根据服务器上的负载,熵池可能会很快重新填满,也可能不会。但正如我在开始时所说,“据我记忆所及”。其他人可能会对此发表更明确的评论。@Sylvain我也没有这方面的任何数字,但这确实取决于游泳池重新注满的速度。我很怀疑会有这么多的注册,以至于池无法在其间重新填充。@deceze您可能是对的^ ^ ^
openssl\u random\u pseudo\u bytes
肯定比其他选项更严重。不过有一个问题:如果服务器以(不是那么)高的速度生成密钥,它很快就会耗尽其熵池…@Sylvain,因此你确实需要生成大量密钥(因为OP希望在注册时使用它…拜托,他不会有Facebook级别的注册数…)而且它仍然会给你比其他任何东西都更好的结果。@deceze“生成很多关键点”真的吗?我脑子里没有数字——但据我记忆所及,Linux的默认熵池大小是4096位,并且,dependin