Ir para o conteúdo

Publicidade

 Estatísticas do Fórum

  • 0 Usuários ativos

    0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

Foto:

Cifra de César

  • Por favor, faça o login para responder
1 resposta neste tópico

#1 decontato

decontato
  • Membros
  • 3 posts

Postado 26 outubro 2010 - 13:39

Pessoal, aqui esta um código que fiz em Perl relativo a
Cifra de César. O código permite troca de posições mais elevadas (em vez da troca de 3 padrão César).

Dado um alfabeto latino A-Z de 26 letras indo de 0 a 25 (A sendo o 0) caso voce for criptografar a letra C
(número 2) com uma troca (chave) de 30 você faria 2 + 30 = 32. Mas como não existe a letra correspondente a 32 você faz a operação módulo. Então ficaria (2+30) mod 26 = 32 mod 26 = 6 = letra G
A=0; B=1; C=2; D=3; E=4; F=5; G=6;
Pra descriptografar faria o processo inverso. Bom não vou explicar a fundo aqui o funcionamento da Congruência Modular pois não é a intenção do post e sim a intenção é disponibilizar o código para fins de estudo devido obviamente que Cifras de Troca (transposição) não são nem um pouco recomendadas hj em dia. Em 1 segundo daria pra descriptografar fazendo todas possibilidades.


Qualquer dúvida relacionada ao código ou criptografia em geral só falar cmg que tentarei ajudar. Fui

Link 1 : http://paste.ideasla...show/25FKaukfRN ou quadro abaixo
#!/usr/bin/perl
use warnings;
use strict;

my @crip;
if( $ARGV[0] eq "-e" )
{
    print "Ciphertext:\n";
    for( my $i=1; $i<=15; $i++ )
    {
        foreach my $letra (split(//,uc($ARGV[1])))
        {
            # print chr(65+(ord($_)-65+$ARGV[2])%26);
            #print chr(ord($_)+$i % 26);
            push(@crip,chr(ord($letra)+$i % 26));       
		
		}
    }
    print "\n";
my $i=1;
	for(my $j=0; $j<=56; $j=$j+4) {
	print "Chave $i: " . substr(join('',@crip), $j, 4) . "\n";
	
$i++;	

	}
	}


  • 0

#2 guidjos

guidjos
  • Moderadores
  • 583 posts

Postado 09 dezembro 2010 - 09:36

Fiz um ROT-13 há um tempo. Poderia ter ficado menor, mas queria fazer em 13 linhas :)

use warnings;
use strict;

die "\n\n\t $0 [-e | -d] [texto]\n" unless @ARGV > 1;
my $opcao	= shift;
my $_		= join " ", @ARGV;
my $chave;

die "\n\n\tOpcao eh \"-e\" (criptografar) ou \"-d\" (descriptografar)\n\n" unless $opcao eq "-e" or $opcao eq "-d";

$\ = "\n\n";
print "\n\n\t";
$chave = "nopqrstuvwxyzabcdefghijklm";

$opcao eq "-e" and eval "tr/a-z/$chave/;";
$opcao eq "-d" and eval "tr/$chave/a-z/;";

print;

Exemplo:


C:\Users\guidjos\Desktop>perl ROT-13.pl -e "testando criptografia fraca"




grfgnaqb pevcgbtensvn senpn


C:\Users\guidjos\Desktop>perl ROT-13.pl -d "grfgnaqb pevcgbtensvn senpn"




testando criptografia fraca


C:\Users\guidjos\Desktop>

obs: por causa do deslocamento usado na chave, usar -e ou -d produz o mesmo resultado. Strings legíveis passadas para o programa vão alternar entre ilegíveis e legíveis. Pra mudar isso, basta usar alguma outra chave.
  • 0