Um hash Bcrypt pode ser armazenado em um BINARY(40)
coluna.
BINARY(60)
, como as outras respostas sugerem, é a escolha mais fácil e mais natural, mas se você deseja maximizar a eficiência do armazenamento, pode salvar 20 bytes desconstruindo sem perdas o hash. Documentei isso mais detalhadamente no GitHub: https://github.com/ademarre/binary-mcf
Os hashes Bcrypt seguem uma estrutura chamada de formato de criptografia modular (MCF). Binário MCF (BMCF) decodifica essas representações de hash textuais para uma estrutura binária mais compacta. No caso de Bcrypt, o hash binário resultante é de 40 bytes.
O Gumbo fez um bom trabalho ao explicar os quatro componentes de um hash do Bcrypt MCF:
$<id>$<cost>$<salt><digest>
A decodificação para BMCF é assim:
$<id>$
pode ser representado em 3 bits.
<cost>$
, 04-31, pode ser representado em 5 bits. Coloque-os juntos por 1 byte.
- O sal de 22 caracteres é uma representação de base 64 (não padrão) de 128 bits. A decodificação Base-64 produz 16 bytes.
- O resumo de hash de 31 caracteres pode ser decodificado em base-64 para 23 bytes.
- Junte tudo por 40 bytes:
1 + 16 + 23
Você pode ler mais no link acima ou examinar minha implementação do PHP , também no GitHub.