Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: Vigenere Cipher: Encode and Decode

by larryk (Friar)
on Jan 19, 2002 at 01:25 UTC ( [id://139953]=note: print w/replies, xml ) Need Help??


in reply to Vigenere Cipher: Encode and Decode

Having read and very much enjoyed this book a few years ago I took a stab at this particular cipher. Your letter crunching was a bit cleaner than mine so I adapted my old script - I split the key into an array to avoid having to create a second string the same size as the plaintext which may be quite large.
#!/usr/bin/perl -lw use constant ENCRYPT => 1; use constant DECRYPT => -1; use strict; my $txt = 'A Perlmonk\'s work is never done!'; my $key = 'larryk'; $txt =~ s/[^a-z]//gi; print 'before : ',$txt; print 'encrypted: ',encrypt( $txt, $key ); print 'after : ',decrypt( encrypt( $txt, $key ), $key ); sub encrypt { my @txt = split '', shift; my @key = split '', shift; join '', map uc letter( ENCRYPT, $txt[$_], $key[$_%@key] ), 0..$#t +xt; } sub decrypt { my @txt = split '', shift; my @key = split '', shift; join '', map lc letter( DECRYPT, $txt[$_], $key[$_%@key] ), 0..$#t +xt; } sub letter { my ($direction,$cipherchar,$keychar) = @_; lc chr( 97 + ( (ord(lc $cipherchar) - 97) + $direction*(ord(lc $keychar ) - 97) ) % 26 ); }
   larryk                                          
perl -le "s,,reverse killer,e,y,rifle,lycra,,print"

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://139953]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others musing on the Monastery: (9)
As of 2024-03-28 10:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found