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

Top comments (0)