Voy a ejecutar SHA256con una contraseña + salt, pero no sé cuánto tiempo debo hacer VARCHARal configurar la base de datos MySQL. ¿Qué es una buena longitud?
Antes de que alguien que lea esto decida seguir este consejo y usarlo SHA-*para hacer hash de contraseñas, LEA esto primero .
c00000fd
2
A menos que esté utilizando SHA-256 en contraseñas, lo que no debe hacer, los hashes tienen una longitud de 256 bits, o 64 caracteres hexadecimales, o 43 caracteres alfanuméricos, o 32 bytes.
caw
Respuestas:
337
Un sha256 tiene 256 bits de longitud, como su nombre lo indica.
Como sha256 devuelve una representación hexadecimal, 4 bits son suficientes para codificar cada carácter (en lugar de 8, como para ASCII), por lo que 256 bits representarían 64 caracteres hexadecimales, por lo tanto, necesita un varchar(64), o incluso un char(64), ya que la longitud es siempre la misma , sin variar en absoluto.
¿podemos usar char (64) como clave principal o binario (32) será mejor para eso? (access_token)
franco
3
Si crees que podrías querer bloquear a un usuario en el futuro, entonces sugiero usarlo varchar(65)como líder !... solo diciendo.
Manatax
105
... o simplemente agrega una columna 'bloqueada'?
Stijn de Witt
55
Como desea tener una sal diferente para cada contraseña, debe almacenarla junto al hash. Para esto, puede usar un campo adicional o pre / agregarlo al hash, por lo que necesitará más de 64 caracteres
Patrick Cornelissen
44
puede usar esta instrucción select para probarla: SELECT length(to_base64(unhex(sha2('say hello to my little friend',256))))siempre es 44, independientemente de la longitud de la cadena original.
DrAhmedJava
72
Opciones de codificación para los 256 bits de SHA256:
Base64: 6 bits por carácter = CHAR(44)incluido el carácter de relleno
Base64 es de 3 bytes por 4 caracteres, por lo que a pesar de que 32 bytes se ajustan a 43 caracteres, en realidad necesita 44. Se agrega un carácter extra = como carácter final
Wilco
2
Bueno, =se puede quitar y volver a agregar.
Rick James
28
¡Prefiero usar BINARY (32) ya que es la forma optimizada!
Puede colocar en esos 32 dígitos hexadecimales de (00 a FF).
+1 - Me gusta optimizado ... para cualquier persona que esté pasando esto ... para usar esto con MySQL ... puedes usarlo UPDATE...SET hash_column=UNHEX(sha256HexString). Entonces, al recuperarlo, tú SELECT HEX(hash_column) AS hash_column.
Kevin Nelson
22
¿Por qué lo harías VARCHAR? No varía Siempre son 64 caracteres, que se pueden determinar ejecutando cualquier cosa en una de las calculadoras SHA-256 en línea .
@hatorade: No, no es una declaración, pero es un tipo de columna válido.
Mark Byers
10
varchar tampoco asigna espacio a menos que se use, a diferencia de char, asigna la cantidad de caracteres totales permitidos, independientemente de si hay datos que lo llenen.
SHA-*
para hacer hash de contraseñas, LEA esto primero .Respuestas:
Un sha256 tiene 256 bits de longitud, como su nombre lo indica.
Como sha256 devuelve una representación hexadecimal, 4 bits son suficientes para codificar cada carácter (en lugar de 8, como para ASCII), por lo que 256 bits representarían 64 caracteres hexadecimales, por lo tanto, necesita un
varchar(64)
, o incluso unchar(64)
, ya que la longitud es siempre la misma , sin variar en absoluto.Y la demo:
Te regalaré :
es decir, una cadena con 64 caracteres.
fuente
varchar(65)
como líder!
... solo diciendo.SELECT length(to_base64(unhex(sha2('say hello to my little friend',256))))
siempre es 44, independientemente de la longitud de la cadena original.Opciones de codificación para los 256 bits de SHA256:
CHAR(44)
incluido el carácter de rellenoCHAR(64)
BINARY(32)
fuente
=
se puede quitar y volver a agregar.¡Prefiero usar BINARY (32) ya que es la forma optimizada!
Puede colocar en esos 32 dígitos hexadecimales de (00 a FF).
¡Por lo tanto BINARIO (32)!
fuente
UPDATE...SET hash_column=UNHEX(sha256HexString)
. Entonces, al recuperarlo, túSELECT HEX(hash_column) AS hash_column
.¿Por qué lo harías VARCHAR? No varía Siempre son 64 caracteres, que se pueden determinar ejecutando cualquier cosa en una de las calculadoras SHA-256 en línea .
fuente
Se corregirá 64 caracteres, así que use
char(64)
fuente
CHARACTER SET ascii
.