Advertisement
Guest User

Vigenere.pl

a guest
Nov 10th, 2013
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.96 KB | None | 0 0
  1. #!usr/bin/env perl
  2.  
  3. use warnings;
  4. use strict;
  5. use feature 'say';
  6. use Getopt::Long;
  7.  
  8. # passa o hex ASCII para upercase
  9. sub toupper{ord(uc chr $_[0])}
  10. # confere se o valor hex ASCII é alphabeto
  11. sub isalpha{chr($_[0]) =~ /[a-zA-Z]/}
  12. # converte o valor para hex ASCII
  13. sub tochar{map ord, split //, $_[0]}
  14.  
  15. sub encode{
  16.     my @word = tochar($_[0]);
  17.     my @key = tochar($_[1]);
  18.    
  19.     my ($a, $tword);
  20.    
  21.     for ($a = 0; $a < @word; $a++){
  22.  
  23.         if(isalpha($word[$a]) && isalpha($key[$a])){
  24.                
  25.             $word[$a] = toupper($word[$a]) - 65;
  26.             $key[$a] = toupper($key[$a]);
  27.            
  28.             my $cript = $key[$a] + $word[$a];
  29.  
  30.             if ($cript >= 91){
  31.                 $cript -= 26;
  32.             }
  33.            
  34.             $word[$a] = $cript;
  35.             $tword .= chr $word[$a];
  36.         }
  37.     }
  38.    
  39.     return $tword;
  40.            
  41. }
  42.  
  43. sub decode{
  44.     my @word = tochar($_[0]);
  45.     my @key = tochar($_[1]);
  46.    
  47.     my ($a, $tword);
  48.    
  49.     for ($a = 0; $a < @word; $a++){
  50.  
  51.         if(isalpha($word[$a]) && isalpha($key[$a])){
  52.                
  53.             $word[$a] = toupper($word[$a]);
  54.             $key[$a] = toupper($key[$a]);
  55.            
  56.             my $cript =  $word[$a] - $key[$a] +65;
  57.  
  58.             if ($cript <= 64){
  59.                 $cript += 26;
  60.             }
  61.            
  62.             $word[$a] = $cript;
  63.             $tword .= chr $word[$a];
  64.         }
  65.     }
  66.     return $tword;
  67. }
  68.  
  69. sub help{
  70.      print "\n[+] Cifra de Vigenere\n";
  71.      print "[0] Coder => guedes.acp\n\t\treleitura de MMxM";
  72.      print "\n\tModo de uso: $0 <palavra> <chave> <e|d>\n";
  73.      print "\n\t \"A chave e a palavra devem ter o mesmo tamanho\"\n\n";
  74.      exit(0);
  75.  }
  76.  
  77.  sub main{
  78.     my $cmd;
  79.     if(@ARGV != 3){
  80.          help;
  81.      }
  82.           if(length($ARGV[0]) != length($ARGV[1])){
  83.          help;
  84.      }
  85.     {
  86.         if ($ARGV[2] eq 'd'){
  87.              $cmd = decode($ARGV[0], $ARGV[1]);
  88.          }
  89.         elsif ($ARGV[2] eq 'e'){
  90.             $cmd = encode($ARGV[0], $ARGV[1]);
  91.         }
  92.         else {
  93.             help;
  94.         }
  95.     }
  96.  
  97.     print "PALAVRA: " . $ARGV[0] . "\n";
  98.      print "CHAVE: " . $ARGV[1] . "\n";
  99.      print "RESULTADO: " . $cmd . "\n\n";
  100.  }
  101. main;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement