在用于password_verify之前,是否需要对用户输入进行哈希处理?

时间:2017-10-01 06:57:58

标签: php sql security hash passwords

我有一个输入字段,用户输入用户名和密码。我是否需要对他们输入的密码进行哈希处理,或者是否可以将其保留,只需在密码数据密码中使用密码即可。我使用password_hash用PASSWORD_BCRYPT散列它们,如果我必须对输入和存储的密码进行散列,我不知道如何比较它们。

2 个答案:

答案 0 :(得分:1)

没有。当您使用class FaderTimer implements FocusListener, ActionListener { private ArrayList colors; private JButton component; private Timer timer; private int alpha; private int increment; FaderTimer(ArrayList colors, JButton component, int interval) { this.colors = colors; this.component = component; component.addFocusListener(this); timer = new Timer(interval, this); } public void focusGained(FocusEvent e) { alpha = 0; increment = 1; timer.start(); } public void focusLost(FocusEvent e) { alpha = steps; increment = -1; timer.start(); } public void actionPerformed(ActionEvent e) { alpha += increment; component.setBackground((Color) colors.get(alpha)); if (alpha == steps || alpha == 0) { timer.stop(); } } } } 或类似函数来散列密码时,在使用password_hash进行测试之前,不应对密码进行散列。至少只要你没有"双重哈希"这是没用的。

password_verify方法将返回一个值,该值包含它使用的哈希,salt和cost。因此,当它传递给password_hash方法时,该方法将知道如何处理作为第一个参数传递的明文密码。

您可以在PHP文档中阅读所有这些内容:

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

答案 1 :(得分:0)

没有必要,但you can do that如果您希望用户提供超过71个字符的密码。

如果您决定预先哈希,请不要将原始二进制字符串传递给password_hash() / password_verify()。你最终会制造另一个弱点。

随附文章的示例代码在此确切设置中演示了Bcrypt-SHA384