package Ġuk . n hs . n hs x . core . random . c rock ford Ċ Ċ import Ġorg . apache . commons . codec . binary . Base 3 2 Ċ import Ġjava . security . Secure Random Ċ import Ġjava . util . regex . Pattern Ċ Ċ class ĠC rock ford D amm Random String Generator ( ĊĠĠĠ Ġprivate Ġval Ġrandom : ĠSecure Random Ġ= ĠSecure Random (), ĊĠĠĠ Ġb anned Words Regex List : ĠList < String > Ġ= Ġread B anned Words From Classpath () Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġchecksum Ġ= Ġchecksum () ĊĠĠĠ Ġprivate Ġval Ġbase Encoder Ġ= ĠBase 3 2 ( 0 ) ĊĠĠĠ Ġprivate Ġval Ġdis allowed Regex es : ĠList < Pattern > Ġ= Ġb anned Words Regex List . map Ġ{ ĠPattern . compile ( it ) Ġ} ĊĊĠĠĠ Ġfun Ġgenerate (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠByteArray ( 5 ) Ġ// Ġceil (( 7 Ġ* Ġ 5 ) Ġ/ Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrandom . next Bytes ( bytes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Base 3 2 Ġ= Ġbase Encoder . encode AsString ( bytes ). substring ( 0 , Ġ 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfriendly Code Ġ= Ġconvert C rock ford ( raw Base 3 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlinking Id Ġ= Ġfriendly Code Ġ+ Ġchecksum . checksum ( friendly Code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is B anned Word ( linking Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlinking Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconvert C rock ford ( raw Base 3 2 : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder ( raw Base 3 2 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġraw Base 3 2 . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Ġ= Ġraw Base 3 2 [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= ĠRAW _ BASE 3 2 _ ALPH AB ET . indexOf ( raw ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Char At ( i , ĠC RO CK F ORD _ BASE 3 2 _ ALPH AB ET [ value ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis B anned Word ( linking Id : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnormal ised Link ing Id Ġ= Ġlinking Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (' 4 ', Ġ' a ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (' 8 ', Ġ' b ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (' 3 ', Ġ' e ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (' 9 ', Ġ' g ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (' 5 ', Ġ' s ') ĊĠĠĠĠĠĠĠ Ġreturn Ġdis allowed Regex es . any Ġ{ Ġit . matcher ( normal ised Link ing Id ). find () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠRAW _ BASE 3 2 _ ALPH AB ET Ġ= Ġ" ABCDEF GH IJ KL MN OP Q RST UV W XYZ 2 3 4 5 6 7 " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠC RO CK F ORD _ BASE 3 2 _ ALPH AB ET Ġ= Ġ" 0 1 2 3 4 5 6 7 8 9 abcdefgh jk m np q rst vw xyz " ĊĊĠĠĠĠĠĠĠ Ġfun Ġchecksum (): ĠD amm Checksum Ġ= ĠD amm Checksum ( C RO CK F ORD _ BASE 3 2 _ ALPH AB ET ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġread B anned Words From Classpath (): ĠList < String > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC rock ford D amm Random String Generator :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getResource AsStream (" b anned - words - regex - list . txt ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. reader () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Lines () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠD amm Checksum ( private Ġval Ġalphabet : ĠString ) Ġ{ ĊĠĠĠ Ġfun Ġvalidate ( string : ĠString ): ĠBoolean Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring . isEmpty () Ġ|| Ġstring . length Ġ> Ġ 1 0 Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġchecksum ( string ) Ġ== Ġ' 0 ' ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠString Index OutOfBoundsException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcharacter Ġgiven Ġwas Ġnot Ġin Ġallowed Ġcharacter Ġset ĊĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSee Ġhttps :// stackoverflow . com / questions / 2 3 4 3 1 6 2 1 / ext ending - the - dam m - algorithm - to - base - 3 2 ĊĠĠĠ Ġfun Ġchecksum ( linking Id : ĠString ): ĠChar Ġ= Ġalphabet [ linking Id . chars () ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġalphabet . indexOf ( it . to Char ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ. reduce ( 0 ) Ġ{ Ġchecksum , Ġdigit Ġ-> Ġdam m Operation ( checksum , Ġdigit ) Ġ}] ĊĊĠĠĠ Ġprivate Ġfun Ġdam m Operation ( checksum : ĠInt , Ġdigit : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġchecksum ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult Ġxor Ġdigit ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult Ġshl Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġ>= ĠD AM M _ MOD UL US ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ( result Ġxor ĠD AM M _ MASK ) Ġ% ĠD AM M _ MOD UL US ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠD AM M _ MOD UL US Ġ= Ġ 3 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠD AM M _ MASK Ġ= Ġ 5 ĊĠĠĠ Ġ} Ċ } Ċ