http://qs321.pair.com?node_id=9400
Category: cryptography
Author/Contact Info ergowolf
Description: creesy ROT13 or caeser encryption. This was one of the first programs I wrote on my own. It does not preserve case.
my $text;
my $type;

# This section grabs the text from the user and converts to lower case
+.
print "Please enter the text you would like to encrypt:";
chomp($text = <STDIN>);
$text =~ tr/A-Z/a-z/;

# This section lets you pick the type of encryption you would like to 
+use.
print "Please enter c for Caesar or r for ROT13 encryption: ";
chomp($type = <STDIN>);
$type =~ tr/A-Z/a-z/;

# This section uses the encryption you chose.
if ($type eq c) {
    $text =~ tr/c-za-b/a-z/;
}
if ($type eq r) {
    $text =~ tr/n-za-m/a-z/;
}
print $text;
Replies are listed 'Best First'.
RE: Cheesy Encryption
by chromatic (Archbishop) on Apr 27, 2000 at 20:36 UTC
    Here's how to make it preserve case. The example is only for ROT-13, as you should be able to figure out the rest. First, remove the tr/A-Z/a-z/:
    if ($type eq 'r'( { $text =~ tr/N-ZA-Mn-za-m/A-Za-z/; }
      Thanks for the tip. I will try it tonight.
RE: Cheesy Encryption
by Anonymous Monk on Jun 15, 2000 at 23:32 UTC
    Another way to do it:
    #!/usr/bin/perl -sp
    BEGIN {
            if ($h) {
                    print <<"USAGE";
    Usage: caesar: $0 -c filename
            rot13: $0 filename
    USAGE
                    exit;
            }
    }
     
    if( $c ) {
            tr/A-Za-z/D-ZA-Cd-za-c/;
    } else {
            tr/A-Za-z/N-ZA-Mn-za-m/;
    }
    
      how about this? offers 3-way "encryption"...
      #!/usr/bin/perl use warnings; use strict; use Getopt::Std; my %opt; usage() unless (getopts('rRcCaA', \%opt)); usage() unless @ARGV; if($opt{'r'} || $opt{'R'}) { while(<>) { tr/a-zA-Z/n-za-mN-ZA-M/; print; } } elsif($opt{'c'}) { while(<>) { tr/a-zA-Z/d-za-cD-ZA-C/; print; } } elsif($opt{'C'}) { while(<>) { tr/d-za-cD-ZA-C/a-zA-Z/; print; } } elsif($opt{'a'}) { while(my $line = <>) { @_ = split//, $line; map { print ord($_), " "; } @_; print "\n"; } } elsif($opt{'A'}) { while(my $line = <>) { @_ = split/ /, $line; map { print chr($_); } @_; print "\n"; } } sub usage { print << "__END__"; -c = encrypt with Caesar encryption -C = decrypt from Caesar encryption -r = encrypt with rot13 -R = decrypt from rot13 -a = encrypt to numerical equivalent -A = decrypt back to ASCII example using files: perl $0 -r plain.txt perl $0 -C encrypted.txt example using STDIN: perl $0 -r <ENTER, type text> __END__ exit 1; }