Laravel Hashing

Laravel
Tempo de leitura: 4 minutos

Laravel Hashing: O Hashing é o processo de transformar dados (como senhas) em uma string de tamanho fixo de forma unidirecional. Diferente da criptografia, o hashing é irreversível: não há como recuperar a senha original a partir do hash. Isso é fundamental para a segurança, pois mesmo que um atacante obtenha acesso ao banco de dados, as senhas dos usuários permanecem protegidas.

O Laravel simplifica essa tarefa usando a Facade Hash e o algoritmo Bcrypt por padrão, que é projetado para ser lento (alto custo computacional), resistindo a ataques de força bruta.

1. ⚙️ Configuração e Algoritmo

O Laravel abstrai o algoritmo de hashing, permitindo que você mude a tecnologia de hashing sem reescrever o código da aplicação.

A. O Algoritmo Padrão

O Bcrypt é o driver padrão e é configurado no arquivo config/hashing.php.

PHP

// config/hashing.php
'driver' => 'bcrypt',

'bcrypt' => [
    'rounds' => 10, // O custo computacional padrão
],
// ...

O parâmetro rounds (ou cost) define o número de iterações do algoritmo.

  • Um número maior de rounds torna a geração do hash mais lenta, aumentando a segurança contra ataques de força bruta.
  • Um número muito alto pode impactar a performance da sua aplicação, especialmente em picos de login/registro. O valor padrão de 10 é um bom equilíbrio.

B. Suporte a Argon2

O Laravel também suporta Argon2, que é o vencedor do Password Hashing Competition e é considerado o algoritmo mais forte atualmente. Para usá-lo, altere o driver para argon.

2. 🔨 Uso Básico da Facade Hash

Todas as interações com o sistema de hashing são feitas através da Facade Hash.

A. Criando um Hash (Hash::make)

O método make() gera o hash seguro para a string de entrada.

PHP

use Illuminate\Support\Facades\Hash;

$password = 'minha_senha_secreta';

// Gera o hash (inclui o algoritmo, o custo e o salt)
$hashedPassword = Hash::make($password); 
// Ex: "$2y$10$tM2yXkIq/G/wJc7F8j4O.uO4xN..."

Nota: O hash gerado é diferente a cada chamada, mesmo para a mesma string de entrada, devido ao uso de um Salt (string aleatória) que é incorporado ao hash final.

B. Verificando o Hash (Hash::check)

Ao fazer login, você compara a senha fornecida pelo usuário com o hash armazenado no banco de dados usando o método check().

PHP

$plainPassword = request('password'); // Senha digitada pelo usuário
$storedHash = $user->password;        // Hash armazenado no DB

// Retorna TRUE se a senha simples corresponder ao hash.
if (Hash::check($plainPassword, $storedHash)) {
    // Autenticação bem-sucedida
    Auth::login($user); 
}

3. 🔄 Rehash (Atualização de Hash)

Com o tempo, o custo computacional ideal (rounds) de um algoritmo aumenta. O Laravel oferece um mecanismo para atualizar o hash de uma senha automaticamente.

O método needsRehash() verifica se o hash armazenado foi gerado com um custo menor ou algoritmo diferente do que o configurado no momento.

PHP

if (Hash::needsRehash($user->password)) {
    // Se precisar de rehash, atualiza a senha com o novo custo e salva
    $user->password = Hash::make($plainPassword);
    $user->save(); 
}

Melhor Prática: Você deve implementar essa verificação no seu fluxo de login. Assim, o hash do usuário é atualizado de forma transparente na próxima vez que ele fizer login.

4. 💡 Boas Práticas e Considerações

  1. Hacking vs. Criptografia: Lembre-se, Hashing é unidirecional e usado para senhas. Criptografia (Crypt::encrypt) é reversível e usada para dados confidenciais que precisam ser recuperados (ex: tokens de API).
  2. Custo (Rounds): Aumente o número de rounds de forma gradual e testada. O tempo de hashing deve estar na ordem de centenas de milissegundos (ex: 150ms-500ms), e não segundos.
  3. Não armazene texto simples: O Laravel faz o hashing automaticamente nos Controllers de autenticação, mas garanta que, em fluxos de criação customizados, você sempre use Hash::make() antes de salvar a senha no banco de dados.

✅ Conclusão Laravel Hashing

Laravel Hashing: O sistema de hashing do Laravel, baseado no algoritmo Bcrypt e acessado pela Facade Hash, é a maneira mais segura de proteger as senhas dos usuários. Ao usar Hash::make() para gerar os hashes e Hash::check() para verificar, você garante que as credenciais permaneçam seguras mesmo em caso de comprometimento do banco de dados, aderindo às melhores práticas de segurança.

Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo este poderoso framework. Para iniciar seus estudos no Laravel, você precisará dominar as seguintes tecnologias:

HTML
HTML
CSS
CSS
Javascript
JavaScript
SQL
SQL
Capa Curso PHP
PHP

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.