crypt-erl is a safe port wrapper for crypt(3) and crypt_gensalt(3) routines.
Generating random salt for Blowfish (bcrypt) method and using it to hash "Password":
1> {ok, Salt} = crypt:gensalt("$2a$").
{ok,"$2a$05$gwtgJ3kUiZSjqwVs91/wXe"}
2> {ok, Hash} = crypt:crypt("Password", Salt).
{ok,"$2a$05$gwtgJ3kUiZSjqwVs91/wXePGURhb0vMWeMHQKimYflWAic4o7qEHm"}Verifying password for given hash:
1> Verify = fun(Phrase, Hash) -> {ok, Hash} =:= crypt:crypt(Phrase, Hash) end.
#Fun<erl_eval.13.126501267>
2> Verify("Password", "$2a$05$gwtgJ3kUiZSjqwVs91/wXePGURhb0vMWeMHQKimYflWAic4o7qEHm").
true
3> Verify("WrongPassword", "$2a$05$gwtgJ3kUiZSjqwVs91/wXePGURhb0vMWeMHQKimYflWAic4o7qEHm").
false
4> Verify("UnixSha512Pass", "$6$qtweESu3ihqnZJsN$SzhUFnMe7Diz7HkO5kirxkb01ubZaxDfR4sQMMPNLea4oDfJNa5Wv4rz6QscrESyZZMBXEtnBFmPUD5eiU0NZ.").
truecrypt:gensalt(Prefix) -> {ok, Salt} | {error, Reasor};
crypt:gensalt(Prefix, Rounds) -> {ok, Salt} | {error, Reason}.Generates salt for given by Prefix crypt method with either default for given method number of rounds or for specified number of Rounds.
Valid prefixes (see also crypt on wikipedia):
| Prefix | Method |
|---|---|
"" |
DES |
"_" |
BSDi |
"$1$" |
MD5 |
$2a$", $2b$", $2y$ |
brypt (Blowfish) |
"$3$" |
NTHASH |
"$5$" |
SHA-256 |
"$6$" |
SHA-512 |
"$md5$" |
Solaris MD5 |
"$sha1$" |
PBKDF1 with SHA-1 |
Please note that not all methods are available on all systems.
crypt:crypt(Phrase, Salt) -> {ok, Hash} | {error, Reason}.Return a hashed password Phrase for given Salt.
crypt:change_workers_limits(MinWorkers, MaxWorkers) -> ok.The default crypt application configuration is {crypt, [{min_workers, 0}, {max_workers, 16}]}..
MaxWorkers controls maximum number of concurrently working port instances.
If all workers are busy further requests will be queued for later execution.
MinWorkers controls minimum number of port instances which are kept alive
awaiting for requests for immediate execution.
This library is licensed under the MIT license.