Vou executar SHA256com uma senha + salt, mas não sei quanto tempo devo fazer VARCHARquando configurar o banco de dados MySQL. O que é um bom comprimento?
Antes que alguém que esteja lendo isso decida seguir este conselho e usar SHA-*senhas de hash, leia-o primeiro .
C00000fd
2
A menos que você esteja usando SHA-256 em senhas, o que você não deve fazer, os hashes terão um comprimento de 256 bits, 64 caracteres hexadecimais, 43 caracteres alfanuméricos ou 32 bytes.
caw
Respostas:
331
Um sha256 tem 256 bits - como o nome indica.
Como sha256 retorna uma representação hexadecimal, 4 bits são suficientes para codificar cada caractere (em vez de 8, como para ASCII), então 256 bits representariam 64 caracteres hexadecimais, portanto, você precisa de um varchar(64), ou mesmo a char(64), pois o comprimento é sempre o mesmo , sem variar.
podemos usar char (64) como chave primária ou o binário (32) será melhor para isso? (access_token)
frankish 15/09
3
Se você acha que pode querer bloquear um usuário no futuro, sugiro usar varchar(65)como líder !... apenas dizendo.
precisa saber é
103
... ou apenas adicionar uma coluna 'bloqueada'?
Stijn de Witt
5
Como você deseja ter um sal diferente para cada senha, você deve armazená-lo próximo ao hash. Para isso, você pode usar um campo extra ou pré / anexá-lo para o hash, então você vai precisar de mais do que 64 caracteres
Patrick Cornelissen
4
você pode usar esta instrução select para testá- SELECT length(to_base64(unhex(sha2('say hello to my little friend',256))))la:, é sempre 44 qualquer que seja o comprimento da string original.
precisa saber é o seguinte
72
Opções de codificação para 256 bits do SHA256:
Base64: 6 bits por caractere = CHAR(44)incluindo o caractere de preenchimento
Base64 é de 3 bytes por 4 caracteres, por isso mesmo que 32 bytes se encaixa em 43 caracteres, você realmente precisa de 44. Um extra = é adicionado como o último personagem
Wilco
2
Bem, o =pode ser retirado e adicionado novamente.
Rick James
28
Eu prefiro usar BINARY (32), pois é a maneira otimizada!
Você pode inserir esses 32 dígitos hexadecimais de (00 a FF).
+1 - Gosto de otimizado ... para qualquer pessoa que esteja acontecendo nisso ... para usar isso no MySQL ... você pode usar UPDATE...SET hash_column=UNHEX(sha256HexString). Então, ao recuperá-lo, você SELECT HEX(hash_column) AS hash_column.
Kevin Nelson
22
Por que você faria isso VARCHAR? Isso não varia. São sempre 64 caracteres, que podem ser determinados executando qualquer coisa em uma das calculadoras online do SHA-256 .
@hatorade: Não, não é uma declaração, mas é um tipo de coluna válido.
Mark Byers
10
O varchar também não aloca espaço, a menos que seja usado, ao contrário do char, ele aloca o número de caracteres totais permitidos, independentemente de haver dados preenchendo-o.
Xenland
6
Serão corrigidos 64 caracteres, então use char(64)
SHA-*
senhas de hash, leia-o primeiro .Respostas:
Um sha256 tem 256 bits - como o nome indica.
Como sha256 retorna uma representação hexadecimal, 4 bits são suficientes para codificar cada caractere (em vez de 8, como para ASCII), então 256 bits representariam 64 caracteres hexadecimais, portanto, você precisa de um
varchar(64)
, ou mesmo achar(64)
, pois o comprimento é sempre o mesmo , sem variar.E a demo:
Darei à você :
ou seja, uma string com 64 caracteres.
fonte
varchar(65)
como líder!
... apenas dizendo.SELECT length(to_base64(unhex(sha2('say hello to my little friend',256))))
la:, é sempre 44 qualquer que seja o comprimento da string original.Opções de codificação para 256 bits do SHA256:
CHAR(44)
incluindo o caractere de preenchimentoCHAR(64)
BINARY(32)
fonte
=
pode ser retirado e adicionado novamente.Eu prefiro usar BINARY (32), pois é a maneira otimizada!
Você pode inserir esses 32 dígitos hexadecimais de (00 a FF).
Portanto BINARY (32)!
fonte
UPDATE...SET hash_column=UNHEX(sha256HexString)
. Então, ao recuperá-lo, vocêSELECT HEX(hash_column) AS hash_column
.Por que você faria isso VARCHAR? Isso não varia. São sempre 64 caracteres, que podem ser determinados executando qualquer coisa em uma das calculadoras online do SHA-256 .
fonte
Serão corrigidos 64 caracteres, então use
char(64)
fonte
CHARACTER SET ascii
.