如何在php中生成一次性6位密码?
如何在PHP中为使用手机的双因素身份验证生成一次性密码尝试以下操作:如何在php中生成一次性6位密码?,php,security,cryptography,Php,Security,Cryptography,如何在PHP中为使用手机的双因素身份验证生成一次性密码尝试以下操作: <?php $pass= rand(100000, 999999); ?> 您可以使用md5或sha1之类的工具来执行此操作: print substr(md5("text"), 0, 6); 如果它必须是唯一的,您可能希望使用存储已生成密码的数据库进行检查,或者使用更长的密码,因为6位数字可以很快使用 你说数字,如果只有数字,你可以: print mt_rand(100000, 999999); 通
<?php
$pass= rand(100000, 999999);
?>
您可以使用md5或sha1之类的工具来执行此操作:
print substr(md5("text"), 0, 6);
如果它必须是唯一的,您可能希望使用存储已生成密码的数据库进行检查,或者使用更长的密码,因为6位数字可以很快使用
你说数字,如果只有数字,你可以:
print mt_rand(100000, 999999);
通过使用生成一次性密码的算法。很乐意帮忙-1.因为缺少。。一切都好,没有理由否决投票。题目提出了一个合法的问题。本可以更好/更进一步的表述,但仍然很容易理解。@Chrules:如果你认为这是一个好问题,请阅读应该说服你的。这不是一个为我写代码的网站。@Clive不是一个好问题,假设OP没有编程经验,这也不是一个坏问题。我们可以很容易地指向以下方向:使用随机生成器或散列生成器。这将使OP自己进行搜索。但我们只想尽我们所能回答:不要使用兰德公司。使用。好,快,干净,容易。。。如果你只想要数字;op表示6位密码。所以,没有任何理由认为他需要更多。这段代码很难看,为什么不使用循环呢?键入所有这些数字方便吗?我发现许多字符会导致问题,我使用此函数的次数远不止一次密码,所以我硬编码了要使用的字符,您会注意到这里和那里缺少一些字符
print substr(md5("text"), 0, 6);
print mt_rand(100000, 999999);
<?php
function random($length = 6)
{
$chars = 'bcdfghjklmnprstvwxzaeiou0123456789';
$result = '';
for ($p = 0; $p < $length; $p++)
{
$result .= ($p%2) ? $chars[mt_rand(19, 23)] : $chars[mt_rand(0, 18)];
}
return $result;
}
echo random();
?>
<?php
function generatePassword($length, $strength)
{
$vowels = 'aeuy';
$consonants = 'bdghjmnpqrstvz';
if ($strength & 1)
{
$consonants .= 'BDGHJLMNPQRSTVWXZ';
}
if ($strength & 2)
{
$vowels .= "AEUY";
}
if ($strength & 4)
{
$consonants .= '23456789';
}
if ($strength & 8)
{
$consonants .= '@#$%';
}
$password = '';
$alt = time() % 2;
for ($i = 0; $i < $length; $i++)
{
if ($alt == 1)
{
$password .= $consonants[(rand() % strlen($consonants))];
$alt = 0;
}
else
{
$password .= $vowels[(rand() % strlen($vowels))];
$alt = 1;
}
}
return $password;
}
echo generatePassword(6,4);
?>