Como criar uma senha com hash laravel

98

Estou tentando criar uma senha com hash para o Laravel. Agora alguém me disse para usar o auxiliar de hash do Laravel, mas não consigo encontrar ou estou olhando na direção errada.

Como faço para criar uma senha com hash laravel? E onde?

Edit: Eu sei qual é o código, mas não sei onde e como usá-lo, então ele me retorna a senha com hash. Se eu obtiver a senha com hash, posso inseri-la manualmente no banco de dados

Graham
fonte
1
Veja como fazer Hash e Verificar Hash no Laravel.
Somnath Muluk de
3
Para aqueles que estão aqui apenas para criar manualmente uma senha com hash, você pode usar a resposta abaixo com php artisan tinker. Por exemplo,echo Hash::make('yourpassword')
sinaza

Respostas:

186

Fazendo hash de uma senha usando Bcrypt em Laravel:

$password = Hash::make('yourpassword');

Isso criará uma senha com hash. Você pode usá-lo em seu controlador ou mesmo em um modelo, por exemplo, se um usuário enviar uma senha usando um formulário para o seu controlador usando o POSTmétodo, você pode fazer o hash usando algo assim:

$password = Input::get('passwordformfield'); // password is form field
$hashed = Hash::make($password);

Aqui, $hashedconterá a senha com hash. Basicamente, você vai fazê-lo ao criar / registrar um novo usuário, de modo que, por exemplo, se um usuário envia detalhes tais como, name, email, usernamee passwordetc através de um formulário, em seguida, antes de inserir os dados no banco de dados, você vai botar o senha após validar os dados. Para obter mais informações, leia a documentação .

Atualizar:

$password = 'JohnDoe';
$hashedPassword = Hash::make($password);
echo $hashedPassword; // $2y$10$jSAr/RwmjhwioDlJErOk9OQEO7huLz9O6Iuf/udyGbHPiTNuB3Iuy

Portanto, você inserirá o $hashedPasswordno banco de dados. Espero que agora esteja claro e se você ainda estiver confuso, sugiro que leia alguns tutoriais, assista a alguns screen cast em laracasts.com e tutsplus.com e também leia um livro sobre Laravel, este é um ebook grátis , você pode baixá-lo.

Atualização: Uma vez que OPdeseja criptografar manualmente a senha usando o Laravel Hashsem nenhuma classe ou formulário, esta é uma maneira alternativa usando o artisan tinkerprompt de comando:

  1. Vá para o seu prompt de comando / terminal
  2. Navegue até a Laravelinstalação (o diretório raiz do seu projeto)
  3. Use cd <directory name>e pressione Enter no prompt de comando / terminal
  4. Em seguida, escreva php artisan tinkere pressione Enter
  5. Então escreva echo Hash::make('somestring');
  6. Você obterá uma senha com hash no console, copie-a e faça o que quiser.

Atualização (Laravel 5.x):

// Also one can use bcrypt
$password = bcrypt('JohnDoe');

O alfa
fonte
Mas onde devo fazer isso. Eu me deparei com isso algumas vezes.
Graham
Acho que fiz uma pergunta errada. Meu banco de dados (que recebi de outra pessoa) tem apenas senhas criptografadas para usuários. Agora eu quero criar uma senha que deve ser hash por laravel. Como posso criar uma senha com hash para inserir isso no banco de dados.
Graham,
Isso é o que eu respondi, para salvar uma senha em dbvocê precisa criptografá-la, então, a partir de uma senha simples, você a criptografará usando Hash::make('passwordstring');e, em seguida, salvará essa senha com hash no banco de dados.
The Alpha
Mas como eu faço isso? Se eu apenas, por exemplo, criar um arquivo php, isso não funciona. Como você entenderá, sou muito novo em laravel
Graham,
Acho que ainda tenho uma pergunta enganosa. Porque eu entendo o que você está dizendo. Mas onde devo usar esse código? Em qual arquivo ou ...? Porque só vou usar isso uma vez. Não é por algum tipo de formulário que posso adicionar um usuário ou algo assim.
Graham
17

Laravel 5 usa bcrypt. Então, você também pode fazer isso.

$hashedpassword = bcrypt('plaintextpassword');

saída da qual você pode salvar no campo de senha da tabela do banco de dados.

Fn Ref: bcrypt

Nagendra Rao
fonte
De onde você tirou essa função, não faz parte do PHP ou do Laravel, faz?
martinstoeckli
1
@martinstoeckli Oh, é, é uma função auxiliar em L5, laravel.com/docs/5.0/hashing#basic-usage
Nagendra Rao
Parece que foi introduzido no Laravel 5.1 recente laravel.com/docs/5.1/helpers#method-bcrypt
Nagendra Rao
2
@Fusion bcrypt é um algoritmo de hash, não um algoritmo de criptografia, com o hash você não pode recuperar o texto simples uma vez que o hash é gerado para ele. Este é o ponto principal do algoritmo de hash. A única coisa que você pode fazer é verificar se um texto simples corresponde ao hash que você tem.
Nagendra Rao
1
@FreddySidauruk Isso não funcionará porque bcrypt gera hash diferentes todas as vezes, mesmo se a senha de entrada for a mesma. Você terá que usar o checkmétodo: if (Hash::check('secret', $hashedPassword)) { // The passwords match... }Ref: laravel.com/docs/5.1/hashing Editar: Não se esqueça de votar positivamente na resposta se tiver ajudado;)
Nagendra Rao
11

A fachada do Laravel Hash fornece hashing Bcrypt seguro para armazenar senhas de usuários.

O uso básico requer duas coisas:

Primeiro inclua a fachada em seu arquivo

use Illuminate\Support\Facades\Hash;

e use o Makemétodo para gerar a senha.

$hashedPassword = Hash::make($request->newPassword);

e quando quiser corresponder à string Hashed, você pode usar o código a seguir:

Hash::check($request->newPasswordAtLogin, $hashedPassword)

Você pode aprender mais com o link do documento do Laravel abaixo para Hashing: https://laravel.com/docs/5.5/hashing

Prashant Barve
fonte
7

Para armazenar a senha no banco de dados, faça o hash da senha e salve.

$password = Input::get('password_from_user'); 
$hashed = Hash::make($password); // save $hashed value

Para verificar a senha, obtenha a senha armazenada da conta do banco de dados

// $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 
}
Somnath Muluk
fonte
4
Adoro esta resposta porque indica onde o Hash está localizado (Illuminate \ Support \ Facades \ Hash)
shintaroid
6

Se você quiser entender como exatamente o laravel funciona, você pode revisar a aula completa no Github: https://github.com/illuminate/hashing/blob/master/BcryptHasher.php

Mas basicamente existem três métodos PHP envolvidos nisso:

$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 ));

A senha com hash é igual à senha laravel 5.x bcrypt. Não há necessidade de fornecer sal e custo, ele terá seus valores padrão.

Esses métodos foram implementados na classe laravel, mas se você quiser saber mais, revise a documentação oficial: http://php.net/manual/en/function.password-hash.php

Jathin Prasad
fonte
Trabalho. Pode ser usado para redefinir a senha se apenas o acesso ao banco de dados estiver disponível.
air4x
2

Você pode usar o seguinte:

$hashed_password = Hash::make('Your Unhashed Password');

Você pode encontrar mais informações: aqui

Chris G
fonte
1

No BcryptHasher.php você pode encontrar o código hash:

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;
}
hendra1
fonte
1
use Illuminate\Support\Facades\Hash;
if(Hash::check($plain-text,$hashed-text))
    {
       return true;
    }
    else
    {
        return false;
    }

eg- $ plain-text = 'text'; $ hashed-text = Hash :: make ('text');

Dharmendra Patel
fonte
Sim. Este é o caminho certo. É necessário usar Illuminate \ Support \ Facades \ Hash. Obrigado!
Nole
1

Aqui está a solução:

use Illuminate\Support\Facades\Hash;    
$password = request('password'); // get the value of password field
$hashed = Hash::make($password); // encrypt the password

NB: Use o código de 1ª linha logo no início em seu controlador. Por último, mas não menos importante, use as duas linhas restantes de código dentro da função de seu controlador onde você deseja manipular os dados após o envio de from. Boa codificação :)

RashedRahat
fonte
0

Compare a senha em laravel e lúmen:

Pode ser possível que a função bcrypt não funcione com php7, então você pode usar o código abaixo em laravel e lumen de acordo com seus requisitos:

use Illuminate\Support\Facades\Hash;

$test = app('hash')->make("test");
if (Hash::check('test', $test)) {
   echo "matched";
} else {
   echo "no matched";
}

Espero que esta ajuda te faça feliz :)

Kamlesh
fonte
-5

ok, este é um extrato da função make em hash.php

    $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);

Basta copiar / colar em um arquivo php e executá-lo.

Fabián Valencia
fonte
1
Esta é uma prática REALMENTE ruim. A menos que você seja muito proficiente em criptografia, você deve simplesmente usar as funções de hash embutidas já feitas.
Nick