2010-02-10 25 views
169

Voy a ejecutar SHA256 en una contraseña + salt, pero no sé por cuánto tiempo crear mi VARCHAR al configurar la base de datos MySQL. ¿Qué es una buena longitud?¿Cuánto dura el hash SHA256?

+3

Antes de que cualquiera que lea esto decide seguir este consejo y use 'SHA- *' para contraseñas hash, [POR FAVOR lea esto primero] (https: //security.stackexchan ge.com/questions/16354/whats-the-advantage-of-using-pbkdf2-vs-sha256-to-generate-an-aes-encryption-key). – c00000fd

+0

Un blog detallado con un ejemplo: http: //sforsuresh.in/mysql_varchar_max_length/ –

Respuesta

241

Un sha256 tiene 256 bits de longitud, como su nombre indica.

Si está utilizando una representación hexadecimal, cada dígito codifica 4 bits; por lo tanto, necesita 64 dígitos para representar 256 bits; por lo tanto, necesita un varchar(64) o un char(64), ya que la longitud es siempre la misma y no varía en absoluto.

Y la demo:

$hash = hash('sha256', 'hello, world!'); 
var_dump($hash); 

le dará:

$ php temp.php 
string(64) "68e656b251e67e8358bef8483ab0d51c6619f3e7a1a9f0e75838d41ff368f728" 

es decir, una cadena con 64 caracteres.

+6

¿podemos usar char (64) como clave principal o será binario (32) mejor para eso? (access_token) – frankish

+3

Si crees que es posible que quieras bloquear a un usuario en el futuro, entonces sugiero usar 'varchar (65)' para un '!' líder ... solo diciendo. – Manatax

+54

... o simplemente agrega una columna 'bloqueado'? –

19

¿Por qué lo harías VARCHAR? No varía Siempre tiene 64 caracteres, que pueden determinarse ejecutando cualquier cosa en one of the online SHA-256 calculators.

+0

¿es una declaración válida de mysql (64)? – sepiroth

+21

@hatorade: No, no es una declaración, pero es un tipo de columna válido. –

+9

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 llenándolo. – Xenland

6

se fijará 64 caracteres, por lo que utilizan char(64)

18

Yo prefiero usar binario (32) ya que es la forma optimizada!

Puede colocar en esos 32 dígitos hexadecimales de (00 a FF).

¡Por lo tanto BINARY (32)!

+6

+1 - Me gusta optimizado ... a cualquier otra persona que esté pasando esto ... para usar esto con MySQL ... puede usar 'UPDATE ... SET hash_column = UNHEX (sha256HexString)'.Luego, al recuperarlo, 'SELECT HEX (hash_column) AS hash_column'. –

32

opciones de codificación de 256 bits de SHA256:

  1. Base 64: 6 bits por Char = CHAR(44) incluyendo carácter de relleno
  2. Hex: 4 bits por Char = CHAR(64)
  3. binario: 8 bits por byte = BINARY(32)
+13

Base64 tiene 3 bytes por 4 caracteres, por lo que, aunque 32 bytes se ajustan a 43 caracteres, en realidad necesita 44. Se agrega un extra = como carácter final – Wilco

Cuestiones relacionadas