Instead of converting binary data to base64 in order to get printable
data, use a white list of characters allowed and select from those.
This also makes sure we will get the right amount of characters as
requested, not potentially longer strings.
Dovecot promotes the use of BLF-CRYPT as a hashing scheme [1].
However, as not all libc-crypt() implementations support this scheme,
use the implementation added in a previous commit.
Also, update the references to the dovecot implementation and a small
test case for testing the blowfish implementation.
[1] https://doc.dovecot.org/configuration_manual/authentication/password_schemes/Fixes#4958