Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!usr/bin/env perl
- use warnings;
- use strict;
- use feature 'say';
- use Getopt::Long;
- # passa o hex ASCII para upercase
- sub toupper{ord(uc chr $_[0])}
- # confere se o valor hex ASCII é alphabeto
- sub isalpha{chr($_[0]) =~ /[a-zA-Z]/}
- # converte o valor para hex ASCII
- sub tochar{map ord, split //, $_[0]}
- sub encode{
- my @word = tochar($_[0]);
- my @key = tochar($_[1]);
- my ($a, $tword);
- for ($a = 0; $a < @word; $a++){
- if(isalpha($word[$a]) && isalpha($key[$a])){
- $word[$a] = toupper($word[$a]) - 65;
- $key[$a] = toupper($key[$a]);
- my $cript = $key[$a] + $word[$a];
- if ($cript >= 91){
- $cript -= 26;
- }
- $word[$a] = $cript;
- $tword .= chr $word[$a];
- }
- }
- return $tword;
- }
- sub decode{
- my @word = tochar($_[0]);
- my @key = tochar($_[1]);
- my ($a, $tword);
- for ($a = 0; $a < @word; $a++){
- if(isalpha($word[$a]) && isalpha($key[$a])){
- $word[$a] = toupper($word[$a]);
- $key[$a] = toupper($key[$a]);
- my $cript = $word[$a] - $key[$a] +65;
- if ($cript <= 64){
- $cript += 26;
- }
- $word[$a] = $cript;
- $tword .= chr $word[$a];
- }
- }
- return $tword;
- }
- sub help{
- print "\n[+] Cifra de Vigenere\n";
- print "[0] Coder => guedes.acp\n\t\treleitura de MMxM";
- print "\n\tModo de uso: $0 <palavra> <chave> <e|d>\n";
- print "\n\t \"A chave e a palavra devem ter o mesmo tamanho\"\n\n";
- exit(0);
- }
- sub main{
- my $cmd;
- if(@ARGV != 3){
- help;
- }
- if(length($ARGV[0]) != length($ARGV[1])){
- help;
- }
- {
- if ($ARGV[2] eq 'd'){
- $cmd = decode($ARGV[0], $ARGV[1]);
- }
- elsif ($ARGV[2] eq 'e'){
- $cmd = encode($ARGV[0], $ARGV[1]);
- }
- else {
- help;
- }
- }
- print "PALAVRA: " . $ARGV[0] . "\n";
- print "CHAVE: " . $ARGV[1] . "\n";
- print "RESULTADO: " . $cmd . "\n\n";
- }
- main;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement