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

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Engage with a sea of insights in this enlightening article, highly esteemed within the encouraging DEV Community. Programmers of every skill level are invited to participate and enrich our shared knowledge.

A simple "thank you" can uplift someone's spirits. Express your appreciation in the comments section!

On DEV, sharing knowledge smooths our journey and strengthens our community bonds. Found this useful? A brief thank you to the author can mean a lot.

Okay