Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re: Polyglot (crypto)

by marcink (Monk)
on Jun 10, 2001 at 21:37 UTC ( #87320=note: print w/replies, xml ) Need Help??


in reply to Polyglot (crypto)

Just a couple of comments:

  • use arrays instead of all those ifs -- think about the problems you'll get into if you want to add,remove or change one of alphabet sets,
  • use for and foreach instead of array indexes -- they do the same thing with less code and less variables,
  • when accessing a single array element use '$text[$w]' rather than '@text[$w]' -- the first character tells Perl that you want to get a scalar (single) value, not an array,
  • use strict and -w (my generic advice ;-)),


And my attempt at rewriting your code:

#!/usr/bin/perl -w use strict; # One array instead of 2x8 if statements my @alphabets = ( "seklbvrfzijdqypcnowmtxuagh", "elbtjpwdvzqaorfiyxnukmghsc", "velukbiyxnordctjgpwhzqafms", "orsdvejwmcbiyhfzlukxntqgpa", "yxsdicvejqfbhmpluaorgkztwn", "ejqyxsdkziurgtwcaovfbhmpln", "jqyhcaxsdlkziuevfrgtwobmpn", "atdvnsirekmfqhwobjclgypxuz" ); my $dec = $ARGV[0] && ($ARGV[0] eq '-d'); # are we decoding? my ( $i, $out ) = ( 0, '' ); foreach ( split / /, <STDIN> ) { # read and split a single li +ne if ( $dec ) { eval "tr/$alphabets[$i]/a-z/"; # decoding tr/// # We need eval because tr/// + does # not allow for substitution +s } else { tr/A-Z/a-z/; eval "tr/a-z/$alphabets[$i]/"; # encoding tr/// -- as above +, # just reversed } $out .= "$_ "; $i = ($i + 1) % @alphabets; # this will walk through 0..7 circle } print "$out\n";


Update: I just noticed the 'reverse' operations in your code -- I skipped them during rewrite and yet the programs are compatible ;-) 'Reverse' does not modify its argument, so you probably wanted to use @text = reverse @text;

-mk

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://87320]
help
Chatterbox?
[erix]: "code of someone that died" -- kinda nice if your code stops working too
[erix]: hard to implement, hmm
[Corion]: erix: Well, they also seem to have changed the server, or some software, or whatever, and seem to be in the process of changing the DB schema from having the "username" as primary key to something else.
[Corion]: Far too many things being done at once, or maybe only now has it become apparent that nobody knows that piece of software anymore
[marto]: good morning all
[Corion]: I consider having an abstract key as userid in your system good, because the "real" company-wide (or even larger) user id will likely not fit your criteria well
[Corion]: A good morning marto!

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (10)
As of 2017-01-23 09:38 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Do you watch meteor showers?




    Results (192 votes). Check out past polls.