#!/usr/bin/perl -w use Digest; use Term::ReadPassword; die "usage: twonk SALT" unless $ARGV[0]; my $salt_file = $ARGV[0]; open SALT, $salt_file or die "can't open salt: $!"; my $ctx = Digest->new('SHA-1'); my $passphrase = read_password('Passphrase: ', 10, 1) or exit 1; $ctx->add($passphrase); $ctx->addfile(SALT); close SALT; my $chars = $salt_file =~ /\.(\d+)$/ ? $1 : 10; my $password = $ctx->b64digest(); # $password =~ tr{/+}{_-}; print substr($password, 0, $chars), "\n";