I'd like to store an scrypt-hashed password in a database. What is the maximum length I can expect?
According to https://github.com/wg/scrypt the output format is $s0$params$salt$key
where:
s0
denotes version 0 of the format, with 128-bit salt and 256-bit derived key.params
is a 32-bit hex integer containing log2(N) (16 bits), r (8 bits), and p (8 bits).salt
is the base64-encoded salt.key
is the base64-encoded derived key.According to https://stackoverflow.com/a/13378842/14731 the length of a base64-encoded string is where n
denotes the number of bytes being encoded.
Let's break this down:
( log2(16) = 4 )
, so the params
field makes up (32-bit / 4 bits) = 8 characters.(4 * ceil(16 / 3))
= 24 characters.(4 * ceil(32 / 3))
= 44 characters.Putting that all together, we get: 4 + 2 + 8 + 24 + 44
= 82 characters.
In Colin Percival's own implementation, the tarsnap scrypt header is 96 bytes. This comprises:
This is also the format used by node-scrypt. There is an explanation of the rationale behind the checksum and the HMAC hash on stackexchange.
As a base64-encoded string, this makes 128 characters.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With