我是PHP和PDO的初学者.
下面的代码可以工作,但是非常慢.有什么办法可以提高效率?
while()效率不高,但是可以完成工作.我尝试了其他解决方案,但没有任何效果.
有什么建议么?
public function register_new_member(){
global $bcrypt;
global $populera;
$query = $this->db->prepare("SELECT id, lid, firstname, surname FROM `members`");
try{
$query->execute();
while ($data = $query->fetch()){
$id = $data['id'];
$lid = $data['lid'];
$username = $populera->create_username($data['firstname'],$data['surname']);
//Show data
echo "<br>Username: ".$username;
echo "<br>ID: ".$id;
echo "<br>LID: ".$lid;
//Static password - change after login
$password = "password";
//Bcrypt
$pass = $bcrypt->generateHash($password);
//Show data
echo "<br>Password: ".$pass;
$query2 = $this->db->prepare("INSERT INTO `login` (`id`, `lid`, `user`, `password`) VALUES (?, ?, ?, ?) ");
$query2->bindValue(1, $id);
$query2->bindValue(2, $lid);
$query2->bindValue(3, $username);
$query2->bindValue(4, $pass);
$query2->execute();
}
//Success?
echo "<br>Saved!";
}catch(PDOException $e){
die($e->getMessage());
}
}
解决方法:
散列函数的速度可能很慢-因为您为所有用户设置的密码都相同,因此可以将该计算移出循环. (这应该很慢,因为通常会在一定数量的“回合”中重复执行哈希操作,以使暴力破解更加困难.)
我无法从您的代码中得知您是否对每个哈希使用了随机盐.如果您是(并且应该是),那么此建议将使您留下许多用相同的盐散列的密码.我不确定您将它们都设置为相同值会带来多大的风险.
我个人会尝试提出一种不预设密码的解决方案-例如生成一个随机令牌,我向每个用户发送电子邮件,以便他们可以为自己创建一个新密码. (总之您可能需要让用户重设忘记的密码.)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。