Băm Bcrypt có thể được lưu trữ trong một BINARY(40)
cột.
BINARY(60)
, như các câu trả lời khác gợi ý, là lựa chọn dễ dàng và tự nhiên nhất, nhưng nếu bạn muốn tối đa hóa hiệu quả lưu trữ, bạn có thể tiết kiệm 20 byte bằng cách giải mã băm một cách dễ dàng. Tôi đã ghi lại tài liệu này kỹ lưỡng hơn trên GitHub: https://github.com/ademarre/binary-mcf
Băm mật mã theo một cấu trúc được gọi là định dạng mã hóa mô đun (MCF). Binary MCF (BMCF) giải mã các biểu diễn băm văn bản này thành một cấu trúc nhị phân nhỏ gọn hơn. Trong trường hợp Bcrypt, băm nhị phân kết quả là 40 byte.
Gumbo đã làm rất tốt khi giải thích bốn thành phần của hàm băm MCF Bcrypt:
$<id>$<cost>$<salt><digest>
Giải mã cho BMCF như sau:
$<id>$
có thể được biểu diễn trong 3 bit.
<cost>$
, 04-31, có thể được biểu thị trong 5 bit. Đặt chúng cùng nhau trong 1 byte.
- Muối 22 ký tự là đại diện cơ sở 64 (không chuẩn) gồm 128 bit. Giải mã Base-64 mang lại 16 byte.
- Bản tóm tắt băm 31 ký tự có thể được giải mã cơ sở 64 thành 23 byte.
- Đặt tất cả lại với nhau trong 40 byte:
1 + 16 + 23
Bạn có thể đọc thêm tại liên kết ở trên hoặc kiểm tra việc triển khai PHP của tôi , cũng trên GitHub.