【问题标题】:Got different output for same input in password encryption method in Laravel在 Laravel 的密码加密方法中,相同的输入得到不同的输出
【发布时间】:2018-09-28 06:44:36
【问题描述】:

我在 Laravel 中有两种方法 singupsignin。使用hash() 密码加密方法。但是有两种方法的两个输出(signupsignin)。

假设我输入了一个名为“abc”的密码,并且从signup 控制器方法中我得到了哈希加密值

$2y$10$fNfBqMh8vqdTkvLJcv0YI.9TLQr4/T4V38qRMgm6aWkanL8a1rCwW

对于相同的输入值,我从signin 方法得到不同的输出

$2y$10$u1fmJjQYKFmT79bB7nrD1.npDrn14YXkCQt.drxgoHURsOwrM319m

这是我的signupform

public function signin(LoginFormValidation $request)
{
 $data = new User();
 $email = $request->email;
 $password = Hash::make($request->password);

 echo $password;
}
public function signup(RegistrationFormValidation $request)
{
 $data = new User();
 $email = $request->email;
 $password = Hash::make($request->password);

 echo $password;
}

signup来自

<form class="cd-signin-modal__form" action="{{ url('/signup') }}" method="GET" id="registration-form">

{{ csrf_field() }}

<p class="cd-signin-modal__fieldset">
    <label class="cd-signin-modal__label cd-signin-modal__label--email cd-signin-modal__label--image-replace" for="signup-email" id="email">E-mail</label>
    <input class="cd-signin-modal__input cd-signin-modal__input--full-width cd-signin-modal__input--has-padding cd-signin-modal__input--has-border" id="reg_email" type="email" placeholder="E-mail" name="reg_email">
    <div id="reg_email_error" class="val_error"></div>
</p>

<p class="cd-signin-modal__fieldset">
    <label class="cd-signin-modal__label cd-signin-modal__label--password cd-signin-modal__label--image-replace" for="signup-password" id="password">Password</label>
    <input class="cd-signin-modal__input cd-signin-modal__input--full-width cd-signin-modal__input--has-padding cd-signin-modal__input--has-border" id="reg_password" type="text" placeholder="Password" name="reg_password">
    <div id="reg_password_error" class="val_error"></div>
</p>

<p class="cd-signin-modal__fieldset">
    <input id="signup" class="cd-signin-modal__input cd-signin-modal__input--full-width cd-signin-modal__input--has-padding" type="submit" value="Create account">                                              
</p>

signin 表单

<form class="cd-signin-modal__form" action="{{ url('/signin') }}" method="GET" id="login-form">

{{ csrf_field() }}

<p class="cd-signin-modal__fieldset">
    <label class="cd-signin-modal__label cd-signin-modal__label--email cd-signin-modal__label--image-replace" for="signin-email">E-mail</label>
    <input class="cd-signin-modal__input cd-signin-modal__input--full-width cd-signin-modal__input--has-padding cd-signin-modal__input--has-border" id="login_email" type="email" placeholder="E-mail">

    <div id="login_email_error" class="val_error"></div>
</p>

<p class="cd-signin-modal__fieldset">
    <label class="cd-signin-modal__label cd-signin-modal__label--password cd-signin-modal__label--image-replace" for="signin-password">Password</label>
    <input class="cd-signin-modal__input cd-signin-modal__input--full-width cd-signin-modal__input--has-padding cd-signin-modal__input--has-border" id="login_password" type="text"  placeholder="Password">

    <div id="login_password_error" class="val_error"></div>
</p>

<p class="cd-signin-modal__fieldset">
    <input id="signin" class="cd-signin-modal__input cd-signin-modal__input--full-width" type="submit" value="Login">
</p>

【问题讨论】:

  • Laravel 使用 bcrypt 哈希算法生成安全哈希。首先bcrypt 不是加密算法,所以不要与相同的输出混淆。第二个bcrypt 按设计不会为每个输入字符串生成相同的哈希值。所以不用担心它需要比较。
  • 只是好奇为什么相同的代码具有相同的参数会生成不同的值
  • 因为如果输出不匹配那么我应该如何使用密码在数据库中查询以找出用户?
  • @bigwolk....是的...我的问题就是这一点...为什么不同!
  • @bigwolk 因为无论您是否指定,bcrypt 总是生成随机盐。拉夫,您不必担心,只需检查Hash::check(),您会没事的

标签: javascript php html laravel


【解决方案1】:

哈希不是加密。这不一样。 Laravel 使用 brcypt 对你的密码进行哈希处理。 每次对密码进行哈希处理时,都会生成不同的字符串。

现在,如果您要检查两个密码是否相同,请使用 Hash::check() 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 2010-09-12
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多