C: SSHA1 Code mit RND SALT

Das generieren von Passwörtern, insbesondere mit durch Zufallszahl generierter SALT Ziffern, hat mich in eine Falle laufen lassen.

Generierung von Passwörtern z.B.

1
2
3
SALT="$(openssl rand 3)"
SHA1="$(printf "%s%s" "$PASSWORD" "$SALT" | openssl dgst -binary -sha1)"
printf "{SSHA}%s\n" "$(printf "%s%s" "$SHA1" "$SALT" | base64)"

Mit den 3 Zufallszahlen habe ich mir keinen Gefallen getan. Mit dem zusammensetzen des Strings mit printf bewegen wir uns um lesbaren Bereich des ASCII Code!

Mit der Zeile 2 erhalten wir einen 20 Byte SHA1 Code. Wenn wir jetzt in Zeile 3 das SALT anfügen und vorher die Zufallszahlen 0 8 erzeugt wurden, bedeutet das „Backspace“ womit der SHA1 Code zerstört ist.

Es ist darauf zu achen, das wir im lesbaren Bereich bleiben oder Ziffern verwenden. Hiermit funktioniert eine Massengenerierung von LDAP SSHA1 Passwörtern

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl
#
use Digest::SHA1;
use MIME::Base64;
my @chars = ("A".."Z", "a".."z");
my $salt;
$salt .= $chars[rand @chars] for 1..3;
$ctx = Digest::SHA1->new;
$ctx->add(@ARGV);
$ctx->add($salt);
$hashedPasswd = '{SSHA}' . encode_base64($ctx->digest . $salt);
print $hashedPasswd;