Syntactic Confectionery Delight PerlMonks

### Re: ACA JAPH (hints)

by goibhniu (Hermit)
 on Aug 22, 2007 at 14:08 UTC ( #634353=note: print w/replies, xml ) Need Help??

My first clue is to explain ACA in the post. It's probably not very helpful; just a nudge in a direction. Here's the link:

My next clue is somethign most here could do themselves, but I just learned it this week (from reading PerlMonks!). Here's the perl -MO=Deparse output (this is without eyepopslikeamosquito's reduction):

@ca = (sub { @kp = split(//, shift @_, 0); \$c = shift @_; \$p2{' '} = ' '; \$C2{' '} = ' '; foreach \$_ (@kp, ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' +, 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x +', 'y', 'z')) { if (not exists \$p2{\$_}) { \$k = chr 65 + (\$a++ + \$c) % 26; \$p2{\$_} = \$k; \$C2{\$k} = \$_; } } } , sub { \$t = shift @_; \$h = shift @_; foreach \$_ (split(//, \$t, 0)) { \$r = \$r . \$\$h{\$_}; } return \$r; } ); \$ca[0]->('thequickbrownfoxjumpsoverthelazydogs', 10); print \$ca[1]->('ZOCK FWUKLMT BMTE LFQR', \%C2) . "\n";

My next clue is to comment my variables. This is a big leap and probably a give away. I wish I had better intermediate clues for ya.

# @ca - code array # @kp - key phrase # \$c - caesar shift (big hint here) # %p2 - short for p2C - plaintext to CIPHERTEXT hash # %C2 - short for C2p - CIPHERTEXT to plaintext hash # \$k - key (one letter of the key alphabet) # \$t - text # \$h - hash reference # \$r - result

ok, here's what I'm doing:

I create an array of annonymous subroutine references.

\$ca[0] is the subroutine that takes a keyphrase and a caesar shift to create a key alphabet. This is what the ACA calls a K1. The keyword is reduced to it's unique letters in the order of occurrence in the key phrase followed by the rest of the letters in alphabetical order. This procuces a scrambled alphabet. In a K1, this scrambled alphabet is written as the plaintext alphabet and is associated with a CIPHERTEXT alphabet in natural order (in the ACA the convention is that plaintext be in lower case and CIPHERTEXT in uppercase). The two alphabets are shifted with respect to each other by a factor that ensures no letter is enciphered to itself.

In \$ca[0] I use the keyphrase letters plus the 'rest of the alphabet' in order as the keys (overloaded word there) to the %p2C hash. Then I turn p2C inside out to get C2p.

\$ca[1] does the decryption. Actually, it takes some text and a hashref to do either decryption or encryption. This simply replaces the letters in the text with the values dereferenced from the hash by that letter. If you pass it p2C, you'd be encrypting; C2p would be decrypting.

The next line calls \$ca[0] with the keyphrase 'thequickbrownfoxjumpsoverthelazydogs' and a caesar shift of 10 to set up the C2p hash.

Finally, print the decrypted version of 'ZOCK FWUKLMT BMTE LFQR'. You know what that says!

I humbly seek wisdom.

Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://634353]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (4)
As of 2022-11-29 03:53 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
My favourite new Perl feature (in 2022) ...

Results (41 votes). Check out past polls.

Notices?