Crate unkr

Source
Expand description

§Unkr decrypt and bruteforce old school cyphers

  • Encrypt and Decrypt strings using old school cryptography, like Vigenere, Transposition, and more.
  • Bruteforce challenges when knowing a part of the clear text.
  • Print out all possible strings and look for words inside yourself.

§Decrypt/Encrypt Examples

§Basic

$ echo "ABCDEF" | unkr encrypt -- transpose:2
ACE
BDF

§Kryptos panel K1

$ echo "EMUFPHZLRFAXYUSDJKZLDKRNSHGNFIVJYQTQUXQBQVYUVLLTREVJYQTMKYRDMFD" | unkr decrypt -- vigenere:PALIMPSEST:KRYPTOS
BETWEENSUBTLESHADINGANDTHEABSENCEOFLIGHTLIESTHENUANCEOFIQLUSION

§Kryptos panel k2

(passing string as argument instead of stdin)

$ unkr decrypt --string 'VFPJUDEEHZWETZYVGWHKKQETGFQJNCEGGWHKK?DQMCPFQZDQMMIAGPFXHQRLGTIMVMZJANQLVKQEDAGDVFRPJUNGEUNAQZGZLECGYUXUEENJTBJLBQCRTBJDFHRRYIZETKZEMVDUFKSJHKFWHKUWQLSZFTIHHDDDUVH?DWKBFUFPWNTDFIYCUQZEREEVLDKFEZMOQQJLTTUGSYQPFEUNLAVIDXFLGGTEZ?FKZBSFDQVGOGIPUFXHHDRKFFHQNTGPUAECNUVPDJMQCLQUMUNEDFQELZZVRRGKFFVOEEXBDMVPNFQXEZLGREDNQFMPNZGLFLPMRJQYALMGNUVPDXVKPDQUMEBEDMHDAFMJGZNUPLGEWJLLAETG' -- 'vigenere:ABSCISSA:KRYPTOS'
ITWASTOTALLYINVISIBLEHOWSTHATPOSSIBLE?THEYUSEDTHEEARTHSMAGNETICFIELDXTHEINFORMATIONWASGATHEREDANDTRANSMITTEDUNDERGRUUNDTOANUNKNOWNLOCATIONXDOESLANGLEYKNOWABOUTTHIS?THEYSHOULDITSBURIEDOUTTHERESOMEWHEREXWHOKNOWSTHEEXACTLOCATION?ONLYWWTHISWASHISLASTMESSAGEXTHIRTYEIGHTDEGREESFIFTYSEVENMINUTESSIXPOINTFIVESECONDSNORTHSEVENTYSEVENDEGREESEIGHTMINUTESFORTYFOURSECONDSWESTIDBYROWS

§Kryptos panel k3

There is some confusion here between encrypt and decrypt, I need to fix the right verb but I am not sure about what to for transpose actually.

Also symbols are totally ignored.

 $ cargo run -- encrypt --string "ENDYAHROHNLSRHEOCPTEOIBIDYSHNAIACHTNREYULDSLLSLLNOHSNOSMRWXMNETPRNGATIHNRARPESLNNELEBLPIIACAEWMTWNDITEENRAHCTENEUDRETNHAEOETFOLSEDTIWENHAEIOYTEYQHEENCTAYCREIFTBRSPAMHHEWENATAMATEGYEERLBTEEFOASFIOTUETUAEOTOARMAEERTNRTIBSEDDNIAAHTTMSTEWPIEROAGRIEWFEBAECTDDHILCEIHSITEGOEAOSDDRYDLORITRKLMLEHAGTDHARDPNEOHMGFMFEUHEECDMRIPFEIMEHNLSSTTRTVDOHW?" -- transpose:24 reverse transpose:8 reverse join
 SLOWLYDESPARATLYSLOWLYTHEREMAINSOFPASSAGEDEBRISTHATENCUMBEREDTHELOWERPARTOFTHEDOORWAYWASREMOVEDWITHTREMBLINGHANDSIMADEATINYBREACHINTHEUPPERLEFTHANDCORNERANDTHENWIDENINGTHEHOLEALITTLEIINSERTEDTHECANDLEANDPEEREDINTHEHOTAIRESCAPINGFROMTHECHAMBERCAUSEDTHEFLAMETOFLICKERBUTPRESENTLYDETAILSOFTHEROOMWITHINEMERGEDFROMTHEMISTXCANYOUSEEANYTHINGQ

§ASD Coin

see https://www.asd.gov.au/news-events-speeches/events/2022-09-01-75th-anniversary-commemorative-coin

 $ echo "URMWXOZIRGBRM7DRWGSC5WVKGS" | cargo run -- encrypt -- atbash

 FINDCLARITYIN7WIDTHX5DEPTH

 $ echo "DVZIVZFWZXRLFHRMXLMXVKGZMWNVGRXFOLFHRMVCVXFGRLM" | cargo run -- encrypt -- atbash

 WEAREAUDACIOUSINCONCEPTANDMETICULOUSINEXECUTION

 $ echo "BGOAMVOEIATSIRLNGTTNEOGRERGXNTEAIFC" | cargo run -- encrypt -- cut:35 transpose:7 join

 BELONGINGTOAGREATTEAMSTRIVINGFOREXC

 $ echo "ECAIEOALEKFNR5LWEFCHDEEAEEE7NMDRXX5" | cargo run -- encrypt -- cut:35 transpose:7 join

 ELLENCEWEMAKEADIFFERENCEXORHEXA5D75

§Cryptors

Current cryptors are

assert_eq!(cryptors,  vec![
       BruteForceCryptor::Vigenere(BruteForceVigenereArgs { // [...]
       }),
       BruteForceCryptor::Cut,
       BruteForceCryptor::Caesar,
       BruteForceCryptor::Transpose,
       BruteForceCryptor::AtBash,
       BruteForceCryptor::Reverse,
       BruteForceCryptor::Swap,
       BruteForceCryptor::Join,
       BruteForceCryptor::Permute(BruteForcePermuteArgs { // [...]
       }),
   ]);

§Bruteforce

The second interesting feature is bruteforcing using clues.

cargo run -- bruteforce --decryptors enigma --string ILBDARKFH --clues HELLOTEST --threads 16

Modules§

models

Functions§

brute_force_decrypt
brute_force_unique_combination
char_position
enigma_encrypt
enigma_init
enigma_next
fuzz_from
fuzz_next
fuzz_next_string_ruled
get_decryptors
Return current supported decryptors.
permute_decrypt
permute_init
permute_next
print_combine_elements
print_decrypt
print_encrypt
read_bruteforce_parameters
transpose_decrypt
transpose_init
transpose_next