Un hash Bcrypt se puede almacenar en una BINARY(40)
columna.
BINARY(60)
, como sugieren las otras respuestas, es la opción más fácil y natural, pero si desea maximizar la eficiencia del almacenamiento, puede ahorrar 20 bytes al deconstruir el hash sin pérdidas. He documentado esto más a fondo en GitHub: https://github.com/ademarre/binary-mcf
Los hash de Bcrypt siguen una estructura denominada formato de cripta modular (MCF). Binary MCF (BMCF) decodifica estas representaciones hash textuales en una estructura binaria más compacta. En el caso de Bcrypt, el hash binario resultante es de 40 bytes.
Gumbo hizo un buen trabajo al explicar los cuatro componentes de un hash Bcrypt MCF:
$<id>$<cost>$<salt><digest>
La decodificación a BMCF es así:
$<id>$
Se puede representar en 3 bits.
<cost>$
, 04-31, se puede representar en 5 bits. Pon estos juntos por 1 byte.
- La sal de 22 caracteres es una representación (no estándar) de base 64 de 128 bits. La decodificación de base 64 produce 16 bytes.
- El resumen de hash de 31 caracteres se puede decodificar en base 64 a 23 bytes.
- Ponlo todo junto para 40 bytes:
1 + 16 + 23
Puede leer más en el enlace de arriba, o examinar mi implementación de PHP , también en GitHub.