All examples will be using SHA-512, <password>
as password placeholder and <salt>
as salt placeholder.
mkpasswd
Note: mkpasswd
binary is installed via the package whois
on Debian / Ubuntu only. On other Linux distribution such as ArchLinux, Fedora, CentOS, openSUSE, etc. mkpasswd
is provided by the expect
package but is an totally different utility which is available as expect_mkpasswd
on Debian / Ubuntu. whois
of all other Linux distro doesn't include mkpasswd
but the source (C lang) can be found on the original repository https://github.com/rfc1036/whois.
# With a random password and random salt
mkpasswd -m sha-512
# With a random random salt
mkpasswd -m sha-512 '<password>'
# Choosing both password and salt
mkpasswd -m sha-512 '<password>' '<salt>'
# Read password from stdin to avoid leaking it in shell command history
mkpasswd -m sha-512 --stdin
OpenSSL
# With a random random salt
openssl passwd -6 '<password>'
# Choosing both password and salt
openssl passwd -6 --salt '<salt>' '<password>'
# Read password from stdin to avoid leaking it in shell command history
openssl passwd -6 -stdin
openssl passwd -6
Ruby
# With a random password and random salt
ruby -e 'require "securerandom"; puts SecureRandom.alphanumeric(20).crypt("$6$" + rand(36 ** 8).to_s(36))'
# With a random random salt
ruby -e 'puts "<password>".crypt("$6$" + rand(36 ** 8).to_s(36))'
# Choosing both password and salt
ruby -e 'puts "<password>".crypt("$6$<salt>")'
# Read password from stdin to avoid leaking it in shell command history
ruby -e 'require "io/console"; puts IO::console.getpass.crypt("$6$" + rand(36 ** 8).to_s(36))'
Note: for those who complains that Random#rand
is a PRNG, you can use the secure SecureRandom#rand
but it's not very important is rand is used only to generate the salt which is publicly available in the hash at the end.
ruby -e 'require "securerandom"; puts "<password>".crypt("$6$" + SecureRandom.rand(36 ** 8).to_s(36))'
Perl
# Choosing both password and salt
perl -le 'print crypt "<password>", "\$6\$<salt>\$"'
Python
Requires Python >= 3.3
# With a random random salt
python -c 'import crypt; print(crypt.crypt("<password>", crypt.mksalt(crypt.METHOD_SHA512)))'
# Choosing both password and salt
python -c 'import crypt; print(crypt.crypt("<password>", "$6$<salt>"))'
# Read password from stdin to avoid leaking it in shell command history
python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))
grub-crypt
Note: The grub
package doesn't include grub-crypt
in many distros.
# With a random random salt
# Read password from stdin to avoid leaking it in shell command history
grub-crypt --sha-512