Created
November 27, 2011 07:15
-
-
Save ptitov/1397144 to your computer and use it in GitHub Desktop.
mdpass perl port
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl | |
use Digest::MD5 qw(md5_hex); | |
use integer; | |
use Config; | |
%english = ( | |
pr => [ 'e', 'i', 'o', 'ay' ], | |
lw => [ 'ay' ], | |
tm => [ '-' ], | |
ps => [ '-' ], | |
oya => [ 'g', 'l' ], | |
ea => [ 'rth', 'll', 'lm', 'ms', '-', 'ns', 'c', 'd', 'k', 'l', 'p', 'r', 's', 't', 'v', 'rd', 'rn', 'rs', 'rt', 'ch', 'df', 'st', 'ds', 'th', 'tl', 'ts' ], | |
pt => [ '-' ], | |
nst => [ '-', 'a', 'e', 'ea' ], | |
ayi => [ 'ng' ], | |
ai => [ 'd', 'l', 'n', 'r', 's', 't', 'nst', 'ns' ], | |
lth => [ 'ou' ], | |
tr => [ 'ie', 'u', 'ou', 'oy', 'ea', 'ee', 'ue' ], | |
ee => [ '-', 'c', 'd', 'k', 'l', 'm', 'n', 'p', 's', 't', 'ds', 'th', 'ks' ], | |
lls => [ '-' ], | |
nsw => [ 'e' ], | |
ts => [ '-' ], | |
ia => [ 'g', 's', 't', 'nt', 'nts', '-' ], | |
tt => [ 'e', 'i' ], | |
sth => [ 'eu' ], | |
ndl => [ 'y' ], | |
rch => [ 'i' ], | |
ei => [ 'ng', 'g', 'th', 'r', 'v', 'z', 'gn' ], | |
tw => [ 'a', 'e', 'o', 'ee' ], | |
ie => [ 'lds', 'ld', '-', 'ndl', 'mh', 'nds', 'nd', 'd', 'r', 's', 'gfr', 'rc' ], | |
xt => [ '-' ], | |
stl => [ 'e' ], | |
spr => [ 'ea', 'i' ], | |
ndr => [ 'e' ], | |
rchb => [ 'i' ], | |
nds => [ '-' ], | |
eo => [ 'pl', 'n', 'w' ], | |
eei => [ 'ng' ], | |
au => [ 'r', 's', 'rs', 'ts', 'ght' ], | |
wsk => [ 'i' ], | |
mh => [ 'i' ], | |
str => [ 'u', 'oy', 'ea', 'a', 'e', 'i', 'o' ], | |
ght => [ '-', 'e', 'y' ], | |
sts => [ '-' ], | |
ay => [ '-', 'l', 's' ], | |
io => [ 'n', 'r', 'lch', 'ns', 'rs', 'b', 'f' ], | |
ua => [ 'rds' ], | |
eu => [ 'r', 's' ], | |
eau => [ 't' ], | |
mm => [ 'e' ], | |
nth => [ 'e' ], | |
mn => [ 'o' ], | |
ey => [ '-' ], | |
ue => [ 'sts', '-', 'd' ], | |
mp => [ '-', 'a' ], | |
mr => [ 'a' ], | |
tch => [ '-' ], | |
ms => [ '-', 'e' ], | |
ui => [ 'ckl', 'cks', 't' ], | |
rks => [ '-' ], | |
ye => [ '-', 't' ], | |
ntr => [ 'y' ], | |
yi => [ 'ng' ], | |
dst => [ '-' ], | |
nts => [ '-' ], | |
uee => [ 'n' ], | |
eye => [ '-', 's' ], | |
ff => [ '-', 'e' ], | |
you => [ 'ng', '-', 'rs', 'r' ], | |
bl => [ 'a', 'e', 'i', 'o', 'oo' ], | |
rst => [ '-' ], | |
fl => [ 'ee', 'a', 'e', 'i', 'yi', 'u', 'y' ], | |
nb => [ 'e' ], | |
'-' => [ 'yea', 'pl', 'pr', 'ai', 'bl', 'br', 'ch', 'cl', 'str', 'cr', 'sc', 'sh', 'sk', 'sl', 'sm', 'sn', 'sp', 'st', 'sw', 'dr', 'dw', 'th', 'tm', 'ea', 'tr', 'ei', 'tw', 'eu', 'fl', 'fr', 'gl', 'a', 'b', 'c', 'd', 'e', 'f', 'gr', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'wh', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'wr', 'hr', 'eye', 'thr', 'io', 'ye', 'kn', 'you', 'kr', 'spr', 'oa', 'oe', 'ou' ], | |
rdl => [ 'y' ], | |
nc => [ 'e', 'ou' ], | |
br => [ 'ou', 'a', 'i', 'o', 'u', 'ea' ], | |
nd => [ '-', 'a', 'e', 'i', 'ee' ], | |
bt => [ '-' ], | |
ppr => [ 'oa' ], | |
rld => [ '-' ], | |
ng => [ '-', 'e', 'i' ], | |
rc => [ 'e', 'u' ], | |
fr => [ 'ee', 'ie', 'a', 'i', 'o', 'ai' ], | |
nh => [ 'i' ], | |
rd => [ '-', 'e', 'i', 'o' ], | |
ft => [ '-', 'e', 'y' ], | |
rds => [ '-' ], | |
nk => [ '-', 'i' ], | |
rf => [ 'u' ], | |
nl => [ 'e', 'y' ], | |
rg => [ '-', 'o' ], | |
nn => [ 'o' ], | |
rk => [ '-', 'o' ], | |
rl => [ 'e', 'i', 'o' ], | |
rm => [ '-', 'a', 'e', 'o', 'y' ], | |
rth => [ '-', 'e', 'u' ], | |
ns => [ '-', 'e' ], | |
rn => [ '-', 'e', 'i', 'ey' ], | |
nt => [ 'ai', 'au', '-', 'e', 'i', 'o', 'u' ], | |
cc => [ 'e', 'o' ], | |
rp => [ '-', 'o' ], | |
thg => [ 'a' ], | |
rr => [ 'ia', 'ie', 'io', 'i', 'o', 'y' ], | |
rs => [ 'o', 'eu', '-', 'e' ], | |
rt => [ '-', 'a', 'e', 'y', 'ai' ], | |
ch => [ '-', 'a', 'e', 'i' ], | |
rv => [ 'e' ], | |
rw => [ 'a' ], | |
ckl => [ 'y' ], | |
yea => [ 'r', 'rs' ], | |
ck => [ '-', 'e' ], | |
cl => [ 'oa', 'ou', 'o' ], | |
ghts => [ '-' ], | |
gh => [ '-', 'e' ], | |
thr => [ 'ou', 'e', 'o', 'u', 'ee' ], | |
oa => [ 'k', 'rs', 'ch' ], | |
mpl => [ 'e' ], | |
gfr => [ 'ie' ], | |
gl => [ 'a' ], | |
cks => [ '-', 'i' ], | |
cr => [ 'ea', 'eo', 'ie', 'yi', 'e', 'i', 'o', 'y' ], | |
lch => [ 'i', 'o' ], | |
gn => [ '-' ], | |
ct => [ 'e', 'o', '-' ], | |
oe => [ 'd', 's' ], | |
sb => [ 'a' ], | |
sc => [ 'a', 'o' ], | |
gr => [ 'ee', 'a', 'e', 'o', 'ou', 'ay', 'ea' ], | |
oi => [ 'ng', 'nt', 'c' ], | |
kn => [ 'e', 'i', 'o', 'ee' ], | |
ttl => [ 'e' ], | |
fts => [ '-' ], | |
kr => [ 'ie' ], | |
ngth => [ '-' ], | |
sh => [ 'a', 'e', 'i', 'o', 'ie', 'ou', '-' ], | |
ks => [ '-' ], | |
oo => [ 'rs', '-', 'd', 'k', 'm', 'n', 'r', 't', 'ks' ], | |
sk => [ '-', 'e', 'i', 'y' ], | |
sl => [ 'ay', 'ee', 'a', 'e', 'i', 'ai' ], | |
sm => [ 'a', 'i', 'o' ], | |
wh => [ 'a', 'e', 'i', 'o', 'y' ], | |
sn => [ 'a' ], | |
rms => [ '-' ], | |
sp => [ 'a', 'o', 'ea' ], | |
a => [ 'rdl', 'rth', 'lf', 'lk', 'll', 'lm', 'lr', 'ls', 'lt', 'lw', 'stl', 'lth', 'mp', 'tch', 'nc', 'nd', 'ng', 'nn', 'nt', 'ttl', 'nch', 'ph', 'pp', 'nsw', 'nds', 'bl', 'rc', 'rd', 'ppr', 'rg', 'rk', 'rl', 'rm', 'rp', 'cc', 'rr', 'rs', 'rt', 'ch', 'ck', 'cr', 'sk', 'rms', '-', 'ss', 'st', 'dv', 'th', 'ngr', 'tt', 'lls', 'b', 'c', 'd', 'g', 'j', 'k', 'l', 'm', 'n', 'p', 'ff', 'r', 's', 't', 'v', 'w', 'z', 'fr', 'ft', 'gr', 'ws', 'rchb', 'rch' ], | |
ou => [ 'th', 'gh', 'nds', 'ntr', '-', 'd', 'r', 's', 't', 'ght', 'ld', 'nd', 'nt', 'bl', 'bt', 'rn', 'rt', 'ch' ], | |
nch => [ 'e' ], | |
dd => [ 'e' ], | |
b => [ 'ea', 'ee', 'ei', 'eo', 'ey', 'a', 'e', 'i', 'o', 'u', 'y', 'eau', 'oo', 'ou', 'oy' ], | |
ngd => [ 'o' ], | |
c => [ 'o', 'u', 'y', 'ou', 'au', '-', 'ei', 'a', 'e', 'i' ], | |
df => [ 'u' ], | |
ss => [ '-', 'e', 'io' ], | |
d => [ '-', 'a', 'oe', 'e', 'i', 'oo', 'o', 'ou', 'u', 'y', 'au', 'ay', 'ea', 'ee', 'ia', 'ie' ], | |
wn => [ '-' ], | |
oy => [ '-' ], | |
st => [ '-', 'a', 'e', 'oo', 'i', 'o', 'y' ], | |
e => [ 'ss', 'st', 'th', 'nds', 'tt', 'tw', 'ngth', '-', 'ft', 'rms', 'b', 'c', 'ngr', 'd', 'f', 'g', 'h', 'l', 'm', 'n', 'p', 'r', 's', 't', 'v', 'w', 'xc', 'xt', 'ld', 'lf', 'll', 'lm', 'lp', 'ls', 'lt', 'lv', 'ctr', 'mn', 'ms', 'nb', 'nc', 'nd', 'nl', 'ns', 'nt', 'mpl', 'mbl', 'str', 'pl', 'pt', 'rc', 'rf', 'rg', 'rl', 'rm', 'rn', 'rr', 'rs', 'rt', 'rv', 'ck', 'cr', 'ct', 'sh' ], | |
f => [ '-', 'oo', 'ou', 'a', 'e', 'i', 'o', 'ai', 'u', 'ea', 'ee', 'ie' ], | |
g => [ 'ai', 'ea', 'ua', 'ue', '-', 'ia', 'a', 'e', 'i', 'o', 'u', 'oi', 'oo' ], | |
wr => [ 'a', 'o' ], | |
h => [ 'ou', '-', 'ai', 'a', 'e', 'i', 'o', 'u', 'ea' ], | |
sw => [ 'i', 'o', 'ee' ], | |
ws => [ '-' ], | |
i => [ 'mm', 'ms', 'nc', 'nd', 'ng', 'nk', 'nt', 'ph', 'rst', 'pp', 'ps', 'rds', 'rth', 'dst', 'bl', 'rd', 'ch', 'ck', 'ghts', 'ct', 'sc', 'sh', 'ldr', 'sl', 'str', 'dd', 'st', 'th', 'ts', 'ttl', 'ff', 'ft', 'fts', 'gh', 'nst', '-', 'b', 'c', 'd', 'f', 'g', 'k', 'l', 'm', 'n', 'p', 'r', 'ngd', 's', 't', 'v', 'ngl', 'ngs', 'ld', 'll', 'ght', 'lt', 'lv' ], | |
j => [ 'ou', 'oy', 'a', 'e', 'u' ], | |
ngl => [ 'e' ], | |
k => [ 'e', 'i', 'ee', '-' ], | |
ld => [ '-', 'e', 'i' ], | |
l => [ 'ai', 'ay', '-', 'a', 'e', 'i', 'o', 'y', 'ea', 'ia', 'ie', 'io', 'oo', 'ou' ], | |
m => [ '-', 'a', 'e', 'i', 'o', 'u', 'y', 'oo', 'ou', 'ai', 'ay', 'ea', 'ee' ], | |
lf => [ '-' ], | |
n => [ 'ou', 'au', '-', 'ea', 'ee', 'a', 'e', 'i', 'o', 'ue', 'y', 'ia', 'io' ], | |
mphs => [ '-' ], | |
o => [ 'cks', 'dd', 'ss', 'st', 'dr', 'ds', 'nst', 'th', 'rks', 'rld', 'ff', 'thg', 'wn', 'ws', 'wsk', '-', 'ld', 'll', 'mp', 'mr', 'b', 'd', 'f', 'g', 'rds', 'h', 'j', 'k', 'l', 'm', 'n', 'rth', 'p', 'r', 'nc', 's', 'nd', 't', 'v', 'ng', 'w', 'nl', 'ns', 'nt', 'lch', 'ph', 'ps', 'bl', 'rc', 'rd', 'rg', 'rk', 'rl', 'rm', 'rn', 'rr', 'rs', 'rt', 'rw', 'ck' ], | |
p => [ 'oi', 'oo', 'ai', 'ay', '-', 'ea', 'eo', 'a', 'e', 'i', 'o', 'u', 'y', 'ie' ], | |
dr => [ 'ea', 'a', 'e', 'i', 'o', 'y' ], | |
ngr => [ 'i', 'y' ], | |
ds => [ '-' ], | |
q => [ 'ui', 'uee' ], | |
ngs => [ '-' ], | |
r => [ 'a', 'e', 'i', 'o', 'u', 'y', 'ie', 'oya', 'oe', 'ou', 'ai', 'ea', 'ei', '-' ], | |
lk => [ 'e', 'i' ], | |
s => [ '-', 'oo', 'ou', 'a', 'e', 'i', 'o', 'u', 'ayi', 'ai', 'ay', 'eei', 'ea', 'ee', 'ei', 'eu', 'ie' ], | |
dv => [ 'e', 'i' ], | |
ll => [ '-', 'e', 'o', 'u', 'y', 'ey' ], | |
t => [ 'ea', 'ee', '-', 'a', 'e', 'i', 'o', 'u', 'y', 'io', 'oo', 'ou' ], | |
hr => [ 'o' ], | |
lm => [ '-', 'e', 'o' ], | |
dw => [ 'e' ], | |
ph => [ '-', 'e', 'i' ], | |
u => [ 'rth', 'lf', 'll', 'str', 'nd', 'ng', 'nh', 'nl', 'nt', 'l', 'n', 'p', 'r', 's', 't', 'ndr', 'bl', 'nth', 'rn', 'rp', 'ch', 'ck', 'sb', 'dd', 'st', 'th', 'lls', 'ff' ], | |
v => [ 'ou', 'a', 'e', 'i', 'y', 'oya', 'oi' ], | |
w => [ 'oo', 'ou', '-', 'ai', 'ay', 'a', 'e', 'i', 'o', 'u', 'ea', 'ee' ], | |
lp => [ '-', 'e' ], | |
ctr => [ 'o' ], | |
pl => [ 'ea', 'ie', 'a', 'e' ], | |
y => [ 'cl', 'd', 'l', 'ss', 'r', 's', 'mphs', 'sth', '-' ], | |
lr => [ 'ea' ], | |
xc => [ 'a' ], | |
ldr => [ 'e' ], | |
th => [ 'io', 'ou', '-', 'a', 'e', 'i', 'o', 'u', 'y', 'ee', 'ei', 'eu', 'ey' ], | |
z => [ 'e' ], | |
mbl => [ 'e' ], | |
lds => [ '-' ], | |
ls => [ '-', 'a', 'e', 'o' ], | |
lt => [ '-', 'a' ], | |
pp => [ 'e', 'i', 'y', 'ea' ], | |
lv => [ 'e' ], | |
tl => [ 'y' ] | |
); | |
$prefix = '-'; | |
die "Only 64-bit architectures are supported\n" if(!$Config{use64bitint}); | |
die "Usage: mdpass passphrase website\n" if(@ARGV<2); | |
$passphrase = $ARGV[0]; | |
$website = $ARGV[1]; | |
$digest = substr(md5_hex($passphrase.$website), 0, 10); | |
$digest = hex($digest); | |
while($digest > 0) { | |
my @ary = @{$english{$prefix}}; | |
die if(@ary == 0); | |
if($digest < 1000) { | |
$out .= '-'; | |
my $number = $digest % 1000; | |
$out .= $number; | |
print "$out\n"; | |
exit; | |
} | |
my $idx = $digest % @ary; | |
$digest /= @ary; | |
my $syllable = @ary[$idx]; | |
$out .= $syllable; | |
$prefix = $syllable; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment