Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid

Re: Vigenere Cipher: Encode and Decode

by larryk (Friar)
on Jan 19, 2002 at 01:25 UTC ( #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 ); }
perl -le "s,,reverse killer,e,y,rifle,lycra,,print"

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://139953]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (8)
As of 2018-06-22 02:46 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (121 votes). Check out past polls.