Hash Bcrypt dapat disimpan dalam BINARY(40)
kolom.
BINARY(60)
, seperti yang disarankan oleh jawaban lain, adalah pilihan termudah dan paling alami, tetapi jika Anda ingin memaksimalkan efisiensi penyimpanan, Anda dapat menghemat 20 byte dengan mendekonstruksi hash tanpa kehilangan. Saya telah mendokumentasikan ini lebih menyeluruh di GitHub: https://github.com/ademarre/binary-mcf
Bcrypt hash mengikuti struktur yang disebut sebagai modular crypt format (MCF). Binary MCF (BMCF) menerjemahkan kode hash ini menjadi struktur biner yang lebih kompak. Dalam kasus Bcrypt, hash biner yang dihasilkan adalah 40 byte.
Gumbo melakukan pekerjaan yang baik untuk menjelaskan empat komponen hash Bcrypt MCF:
$<id>$<cost>$<salt><digest>
Penguraian ke BMCF seperti ini:
$<id>$
dapat direpresentasikan dalam 3 bit.
<cost>$
, 04-31, dapat direpresentasikan dalam 5 bit. Masukkan ini bersama-sama selama 1 byte.
- Garam 22 karakter adalah representasi basis-64 (non-standar) dari 128 bit. Dekode basis-64 menghasilkan 16 byte.
- Intisari 31-karakter dapat base-64 diterjemahkan ke 23 byte.
- Gabungkan semuanya selama 40 byte:
1 + 16 + 23
Anda dapat membaca lebih lanjut di tautan di atas, atau memeriksa implementasi PHP saya , juga di GitHub.