DEV Community

Lithe
Lithe

Posted on

Lithe Hash: Um Módulo Robusto para Hashing Seguro de Senhas

O Lithe Hash é um módulo robusto projetado para hashing seguro de senhas utilizando o algoritmo Bcrypt. Este módulo simplifica o processo de criação, verificação e gerenciamento de hashes de senhas, garantindo que as melhores práticas de segurança sejam seguidas.

Índice

  1. Instalação
  2. Uso
  3. Testes
  4. Licença

Instalação

Para instalar o pacote lithemod/hash, você pode usar o Composer. Execute o seguinte comando no seu terminal:

composer require lithemod/hash
Enter fullscreen mode Exit fullscreen mode

Isso adicionará o pacote às dependências do seu projeto, permitindo que você utilize a classe Hash em sua aplicação.

Uso

Importando a Classe

Antes de usar a classe Hash, você deve importá-la em seu arquivo PHP:

use Lithe\Support\Security\Hash;
Enter fullscreen mode Exit fullscreen mode

Criando um Hash

Para criar um hash a partir de uma senha, utilize o método make. O método aceita uma senha e um array opcional de opções:

$hash = Hash::make('sua_senha', ['cost' => 10]);
Enter fullscreen mode Exit fullscreen mode

Parâmetros:

  • string $value: A senha a ser hashed.
  • array $options: Parâmetros opcionais (por exemplo, cost) para ajustar o algoritmo de hashing.

Retorna: Uma string hash que pode ser armazenada em um banco de dados.

Exemplo:

$password = 'minha_senha_segura';
$hash = Hash::make($password, ['cost' => 12]);
echo "Senha Hashed: " . $hash;
Enter fullscreen mode Exit fullscreen mode

Verificando um Hash

Para verificar se uma senha corresponde ao hash, utilize o método check:

$isValid = Hash::check('sua_senha', $hash);
if ($isValid) {
    echo 'Senha é válida!';
} else {
    echo 'Senha inválida.';
}
Enter fullscreen mode Exit fullscreen mode

Parâmetros:

  • string $value: A senha a ser verificada.
  • string $hash: A senha hash para comparação.

Retorna: true se a senha corresponder ao hash; false caso contrário.

Exemplo:

if (Hash::check('minha_senha_segura', $hash)) {
    echo 'Senha está correta!';
} else {
    echo 'Senha está incorreta!';
}
Enter fullscreen mode Exit fullscreen mode

Verificando se um Hash Precisa de Rehashing

Você pode determinar se um hash precisa ser rehashed (por exemplo, se você alterar o fator de custo) utilizando o método needsRehash:

$needsRehash = Hash::needsRehash($hash, ['cost' => 14]);
if ($needsRehash) {
    // Rehash com um novo custo
    $hash = Hash::make('sua_senha', ['cost' => 14]);
}
Enter fullscreen mode Exit fullscreen mode

Parâmetros:

  • string $hash: A senha hash a ser avaliada.
  • array $options: Parâmetros opcionais para especificar o custo.

Retorna: true se o hash precisa ser rehashed; false caso contrário.

Exemplo:

if (Hash::needsRehash($hash, ['cost' => 15])) {
    $hash = Hash::make('minha_senha_segura', ['cost' => 15]);
    echo "Senha Rehashed: " . $hash;
}
Enter fullscreen mode Exit fullscreen mode

Entendendo o Bcrypt

O Bcrypt é uma função de hashing de senhas amplamente utilizada, projetada para ser lenta e intensiva em computação, tornando-a resistente a ataques de força bruta. Ao utilizar um fator de custo configurável, o Bcrypt permite que você aumente a dificuldade do hashing conforme o hardware se torna mais rápido.

  • Fator de Custo: O fator de custo determina a complexidade computacional de hashing de uma senha. Ele representa o número de iterações do algoritmo de hashing. Um custo mais alto significa mais segurança, mas também aumenta o tempo de processamento. A faixa recomendada é entre 10 e 12 para a maioria das aplicações.

Tratamento de Exceções

O método make lança uma InvalidArgumentException se o custo for definido fora da faixa válida (4 a 31). Você deve tratar isso em seu código para garantir robustez:

try {
    $hash = Hash::make('sua_senha', ['cost' => 3]); // Custo inválido
} catch (\InvalidArgumentException $e) {
    echo "Erro: " . $e->getMessage();
}
Enter fullscreen mode Exit fullscreen mode

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

Image of Datadog

The Essential Toolkit for Front-end Developers

Take a user-centric approach to front-end monitoring that evolves alongside increasingly complex frameworks and single-page applications.

Get The Kit