You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
If the custom salt contains a character which isn't a valid bcrypt Base64 digit, the library will silently encode the salt. This is a huge problem. If the salt is just a faulty Base64 string (e. g., it uses + instead of .), it will be double-encoded, causing it to effectively lose 33 bits.
The library also requires the custom salt to always contain 22 bytes, even if a raw salt would only have to be 16 bytes long. This forces us to either generate 6 useless extra bytes or pad the string with garbage data.
Unfortunately, there's no simple fix, because it's not always possible to distinguish between a raw salt and a pre-encoded one. If the string happens to contain only Base64 digits, it could be both.
I suggest to either ask for raw salts or for pre-encoded salts, not both. Using raw salts is probably the better solution:
Why would anybody want to do the weird Base64 encoding herself?
This is also very error-prone. Many people aren't aware that bcrypt doesn't use standard Base64.
Base64 encoded salts require complicated validation (the length, the digits and a special check for the last digit). With raw salts, we only have to check the length.
Either way, it should be only one possible format, and the manual should clearly state what the function expects.
The text was updated successfully, but these errors were encountered:
If the custom salt contains a character which isn't a valid bcrypt Base64 digit, the library will silently encode the salt. This is a huge problem. If the salt is just a faulty Base64 string (e. g., it uses
+
instead of.
), it will be double-encoded, causing it to effectively lose 33 bits.The library also requires the custom salt to always contain 22 bytes, even if a raw salt would only have to be 16 bytes long. This forces us to either generate 6 useless extra bytes or pad the string with garbage data.
Unfortunately, there's no simple fix, because it's not always possible to distinguish between a raw salt and a pre-encoded one. If the string happens to contain only Base64 digits, it could be both.
I suggest to either ask for raw salts or for pre-encoded salts, not both. Using raw salts is probably the better solution:
Either way, it should be only one possible format, and the manual should clearly state what the function expects.
The text was updated successfully, but these errors were encountered: