Det modulära kryptformatet för bcrypt består av
$2$
,$2a$
eller$2y$
identifiera hashingalgoritmen och -formatet- ett tvåsiffrigt värde som anger kostnadsparametern, följt av
$
- ett 53 tecken långt base-64-kodat värde (de använder alfabetet
.
,/
,0
–9
,A
–Z
,a
–z
som skiljer sig från standard Base 64-kodning alfabetet) som består av:- 22 tecken salt (i praktiken endast 128 bitar av de 132 avkodade bitarna)
- 31 tecken krypterad utdata (i praktiken endast 184 bitar av de 186 avkodade bitarna)
Den totala längden är alltså 59 respektive 60 byte.
När du använder 2a-formatet behöver du 60 byte. Och därför för MySQL rekommenderar jag att du använder BINÄR(60)
CHAR
är inte binärt säker och likhet beror inte enbart på bytevärdet utan på den faktiska sammanställningen; i värsta fall A
behandlas som lika med a
. Se _bin
och binär
Samlingar
för mer information.