From 921a486b476939d2f95760d5e7e61b5468912b45 Mon Sep 17 00:00:00 2001 From: Ole Tange Date: Tue, 4 Sep 2012 15:32:24 +0200 Subject: [PATCH] goodpasswd: Added --- goodpasswd/goodpasswd | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100755 goodpasswd/goodpasswd diff --git a/goodpasswd/goodpasswd b/goodpasswd/goodpasswd new file mode 100755 index 0000000..3309d8c --- /dev/null +++ b/goodpasswd/goodpasswd @@ -0,0 +1,34 @@ +#!/usr/bin/perl + +# This program generates passwords that: +# +# * are hard to guess +# * will be displayed unambigously in any (normal) font +# * will survive being passed through a bad fax machine +# * has UPPER lower number and sign +# +# Too close: B8 cC g9 kK lI l1 oO O0 pP sS uU vV xX zZ ,. :; `' S5 +# Causes problems in URLs: @/: +# Causes problems in shell: ! " # $ & ( ) [ ] { } ? | < > \ * +# SQL uses: % for wildcard +# Hard to type: ^ ~ ¨ ¤ § ½ æ ø å Æ Ø Å +# Never 2 same chars next to eachother. (--) is bad + +my $pw; +my @chars=split //, 'abdefhijmnqrtyADEFGHJLMNQRTY23467=+-'; +do { + $pw = ""; + for (1..12) { + do { + # avoid double chars (such as --) + $this = $chars[rand $#chars+1] + } while($last eq $this); + $last = $this; + $pw .= $this; + } +} while (not($pw =~ /[A-Z]/ and + $pw =~ /[a-z]/ and + $pw =~ /[0-9]/ and + $pw =~ /[^a-zA-Z0-9]/)); + +print "$pw\n";