Created
November 27, 2011 07:15
-
-
Save ptitov/1397144 to your computer and use it in GitHub Desktop.
mdpass perl port
This file contains hidden or 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