Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Que tipo de dados usar para o campo de senha com hash e qual tamanho?


Atualização:simplesmente usar uma função de hash não é forte o suficiente para armazenar senhas. Você deve ler a resposta de Gilles neste tópico para uma explicação mais detalhada.

Para senhas, use um algoritmo de hash de fortalecimento de chave como Bcrypt ou Argon2i. Por exemplo, em PHP, use a função password_hash() , que usa Bcrypt por padrão.
$hash = password_hash("rasmuslerdorf", PASSWORD_DEFAULT);

O resultado é uma cadeia de 60 caracteres semelhante à seguinte (mas os dígitos variam, pois gera um sal exclusivo).
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

Use o tipo de dados SQL CHAR(60) para armazenar esta codificação de um hash Bcrypt. Observe que esta função não codifica como uma string de dígitos hexadecimais, portanto, não podemos deshexá-la facilmente para armazená-la em binário.

Outras funções de hash ainda têm uso, mas não para armazenar senhas, então manterei a resposta original abaixo, escrita em 2008.

Depende do algoritmo de hash que você usa. Hashing sempre produz um resultado do mesmo tamanho, independentemente da entrada. É típico representar o resultado de hash binário em texto, como uma série de dígitos hexadecimais. Ou você pode usar o UNHEX() função para reduzir uma sequência de dígitos hexadecimais pela metade.
  • MD5 gera um valor de hash de 128 bits. Você pode usar CHAR(32) ou BINARY(16)
  • SHA-1 gera um valor de hash de 160 bits. Você pode usar CHAR(40) ou BINARY(20)
  • SHA-224 gera um valor de hash de 224 bits. Você pode usar CHAR(56) ou BINARY(28)
  • SHA-256 gera um valor de hash de 256 bits. Você pode usar CHAR(64) ou BINARY(32)
  • SHA-384 gera um valor de hash de 384 bits. Você pode usar CHAR(96) ou BINARY(48)
  • SHA-512 gera um valor de hash de 512 bits. Você pode usar CHAR(128) ou BINARY(64)
  • BCrypt gera um valor de hash de 448 bits dependente da implementação. Você pode precisar de CHAR(56), CHAR(60), CHAR(76), BINARY(56) ou BINARY(60)

A partir de 2015, o NIST recomenda o uso de SHA-256 ou superior para quaisquer aplicações de funções de hash que requeiram interoperabilidade. Mas o NIST não recomenda usar essas funções de hash simples para armazenar senhas com segurança.

Algoritmos de hash menores têm seus usos (como internos para um aplicativo, não para intercâmbio), mas são conhecido por ser crackável .