我正在尝试为Laravel创建哈希密码。现在有人告诉我使用Laravel哈希帮助器,但我似乎找不到它,或者我的方向错误。
如何创建laravel哈希密码?在哪
编辑:我知道代码是什么,但我不知道在哪里以及如何使用它,因此它给了我哈希密码。如果得到哈希密码,则可以手动将其插入数据库
Answers:
在Laravel
以下位置使用Bcrypt哈希密码:
$password = Hash::make('yourpassword');
这将创建一个哈希密码。您可以在控制器甚至模型中使用它,例如,如果用户使用POST
方法使用表单向您的控制器提交密码,则可以使用以下方式对它进行哈希处理:
$password = Input::get('passwordformfield'); // password is form field
$hashed = Hash::make($password);
在这里,$hashed
将包含哈希密码。基本上,你会创建/注册新用户,因此,举例来说做到这一点,如果用户提交的细节,例如,name
,email
,username
和password
等使用的形式,那么你之前将数据插入到数据库中,你会散列验证数据后输入密码。有关更多信息,请阅读文档。
更新:
$password = 'JohnDoe';
$hashedPassword = Hash::make($password);
echo $hashedPassword; // $2y$10$jSAr/RwmjhwioDlJErOk9OQEO7huLz9O6Iuf/udyGbHPiTNuB3Iuy
因此,您将把插入$hashedPassword
数据库。希望,现在已经很清楚了,如果您仍然感到困惑,那么我建议您阅读一些教程,在laracasts.com和tutsplus.com上观看一些屏幕截图,并在上阅读一本书Laravel
,这是一本免费的电子书,您可以下载。
更新:由于OP
想要使用Laravel手动加密密码Hash
而无需任何类或形式,因此这是使用artisan tinker
from命令提示符的另一种方法:
Laravel
安装(您项目的根目录)cd <directory name>
并在命令提示符/终端上按Enterphp artisan tinker
并按回车echo Hash::make('somestring');
// Also one can use bcrypt
$password = bcrypt('JohnDoe');
db
您中需要对其进行加密,因此,您将使用普通密码从密码中进行加密Hash::make('passwordstring');
,然后将此哈希密码保存在数据库中。
Laravel 5使用bcrypt
。因此,您也可以这样做。
$hashedpassword = bcrypt('plaintextpassword');
您可以将其输出保存到数据库表的密码字段中。
Fn参考:bcrypt
check
方法:if (Hash::check('secret', $hashedPassword)) { // The passwords match... }
参考:laravel.com/docs/5.1/hashing编辑:如果答案对您有所帮助,请不要忘了投票;)
Laravel Hash外观提供安全的Bcrypt哈希存储用户密码。
基本用法需要两件事:
首先在文件中包含Facade
use Illuminate\Support\Facades\Hash;
并使用Make
Method生成密码。
$hashedPassword = Hash::make($request->newPassword);
当您想要匹配哈希字符串时,可以使用以下代码:
Hash::check($request->newPasswordAtLogin, $hashedPassword)
您可以通过下面的Laravel文档链接了解更多有关散列的信息:https ://laravel.com/docs/5.5/hashing
$password = Input::get('password_from_user');
$hashed = Hash::make($password); // save $hashed value
// $user is database object
// $inputs is Input from user
if( \Illuminate\Support\Facades\Hash::check( $inputs['password'], $user['password']) == false) {
// Password is not matching
} else {
// Password is matching
}
如果您想了解laravel的工作原理,可以查看Github上的完整课程:https : //github.com/illuminate/hashing/blob/master/BcryptHasher.php
但是基本上涉及到三种PHP方法:
$pasword = 'user-password';
// To create a valid password out of laravel Try out!
$cost=10; // Default cost
$password = password_hash($pasword, PASSWORD_BCRYPT, ['cost' => $cost]);
// To validate the password you can use
$hash = '$2y$10$NhRNj6QF.Bo6ePSRsClYD.4zHFyoQr/WOdcESjIuRsluN1DvzqSHm';
if (password_verify($pasword, $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
//Finally if you have a $hash but you want to know the information about that hash.
print_r( password_get_info( $password_hash ));
哈希密码与laravel 5.x bcrypt密码相同。无需添加盐和成本,它将采用其默认值。
这些方法已在laravel类中实现,但是如果您想了解更多信息,请查看官方文档:http : //php.net/manual/zh/function.password-hash.php
在BcryptHasher.php中,您可以找到哈希码:
public function make($value, array $options = array())
{
$cost = isset($options['rounds']) ? $options['rounds'] : $this->rounds;
$hash = password_hash($value, PASSWORD_BCRYPT, array('cost' => $cost));
$hash = password_hash($value, PASSWORD_BCRYPT, array('cost' => $cost));
echo $value.' '.PASSWORD_BCRYPT.' '.$cost.' ';
echo $hash;die();
if ($hash === false)
{
throw new RuntimeException("Bcrypt hashing not supported.");
}
return $hash;
}
use Illuminate\Support\Facades\Hash;
if(Hash::check($plain-text,$hashed-text))
{
return true;
}
else
{
return false;
}
例如-$ plain-text ='text'; $ hashed-text = Hash :: make('text');
好的,这是hash.php中make函数的摘录
$work = str_pad(8, 2, '0', STR_PAD_LEFT);
// Bcrypt expects the salt to be 22 base64 encoded characters including
// dots and slashes. We will get rid of the plus signs included in the
// base64 data and replace them with dots.
if (function_exists('openssl_random_pseudo_bytes'))
{
$salt = openssl_random_pseudo_bytes(16);
}
else
{
$salt = Str::random(40);
}
$salt = substr(strtr(base64_encode($salt), '+', '.'), 0 , 22);
echo crypt('yourpassword', '$2a$'.$work.'$'.$salt);
只需将其复制/粘贴到php文件中并运行即可。