密码哈希在php mysql中不起作用

时间:2016-07-06 14:10:30

标签: php mysql password-hash php-password-hash

我正在尝试使用phpmysql进行密码哈希。问题是password_verify到目前为止似乎对我没有用。比如,我在注册时的密码是' 123456789'。我使用

将其存储在数据库中
prePersist()

然后当我进入' 123456789'在登录字段中,它什么都不做,失败。

这是我的代码:

<?php

namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use libphonenumber\PhoneNumberFormat;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;

class PhonenumberType extends AbstractType
{
    private $phoneNumberUtil;

    public function __construct(PhoneNumberUtil $phoneNumberUtil)
    {
         $this->phoneNumberUtil = $phoneNumberUtil;
    }

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('phonenumber', 'hidden')
            ->add('original')
            ->addEventListener(FormEvents::SUBMIT, function(FormEvent $event) use ($this) {
                  $entity = $event->getData();

                  $phoneNumber = $this->phoneNumberUtil->parse($entity->getOriginal(), PhoneNumberUtil::UNKNOWN_REGION);
                  $normalized_phonenumber = $this->phoneNumberUtil->format($phoneNumberObj, PhoneNumberFormat::E164);

                  $entity->setPhoneNumber($normalized_phonenumber);
        ;
    }

    /**
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Phonenumber'
        ));
    }
}

3 个答案:

答案 0 :(得分:3)

  

@Fred Li:谢谢,这对我有用。我在数据库中的密码列长度是50.更新它并立即工作,再次谢谢! - Bishwaroop Chakraborty“

如通讯中所述:

来自http://php.net/manual/en/function.password-hash.php

的示例

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a是60个字符。

您的密码列的长度小于60,这就是问题所在。

它太短而你的代码无声地失败因为它而且你需要在改变列的长度后重新开始使用新的哈希。

  • 手册说255是个不错的选择。

注意:

注意关于XSS注射的其他评论。

以下是一些好文章:

并在标题后添加exit;。否则,您的代码可能希望继续执行。

答案 1 :(得分:0)

如果新来者在验证了足够的数据存储量(例如:varchar255)后仍然对此报错

请确保在验证密码功能中使用不带阴影的string

verify_password($unhashed-string, $hashed-string)

我失去了几个小时的睡眠,将散列的string传递给函数的第一个参数。

答案 2 :(得分:0)

我正在使用河豚算法对密码进行哈希处理。它已成功为我运行,因此您可以尝试一下。

<?php

$pass = "test678";

$hash = password_hash($pass, PASSWORD_BCRYPT);  //password_hash() function hash given password

$matchpass = "test678";

$match = password_verify($matchpass, $hash); // password_verify() function hash given boolean value if password can match so it return 1 otherwise 0

if ($match == true) {
    echo "Password can match successfully......";
} else {
    echo "Password cannot match please try again.";
}

?>

输出:

密码可以成功匹配......