[Perl] Ejemplo de Cifrado Cesar

Iniciado por BigBear, Noviembre 28, 2014, 01:48:09 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Un simple ejemplo de como hacer en cifrado cesar en Perl.

El codigo :

Código: perl

# !usr/bin/perl
# Caesar Cipher
# Coded By Doddy Hackman in the year 2014

head();
menu();
copyright();

# Functions

sub head {
    print "\n-- == Caesar Cipher == --\n";
}

sub copyright {
    print "\n\n-- == (C) Doddy Hackman 2014 == --\n";
}

sub menu {
    print qq(
==============
= Menu       =
==============
1 - Encode   =
2 - Decode   =
3 - Exit     =
==============
);

    print "\n[+] Option : ";
    chomp( my $op = <stdin> );

    if ( $op eq "3" ) {
        copyright();
        <stdin>;
        exit(1);
    }

    print "\n[+] Enter text : ";
    chomp( my $text = <stdin> );

    print "\n[+] Result ...\n\n";

    if ( $op eq "1" ) {
        print cifrado_cesar($text);
        <stdin>;
        menu();
    }
    elsif ( $op eq "2" ) {
        print descifrado_cesar($text);
        <stdin>;
        menu();
    }
    else {
        menu();
    }

}

sub cifrado_cesar {

    my @re;

    @letras = split( //, $_[0] );

    for my $letra (@letras) {

        if ( $letra ne " " ) {

            $letrafinal = chr( ord($letra) + 3 );

            $letrafinal =~ s/{/a/;
            $letrafinal =~ s/\|/b/;
            $letrafinal =~ s/}/c/;

            push( @re, $letrafinal );

        }
        else {
            push( @re, " " );
        }
    }

    return @re;

}

sub descifrado_cesar($texto) {

    my @re;

    @letras = split( //, $_[0] );

    for my $letra (@letras) {

        if ( $letra ne " " ) {

            $letrafinal = chr( ord($letra) - 3 );

            $letrafinal =~ s/\^/x/;
            $letrafinal =~ s/_/y/;
            $letrafinal =~ s/`/z/;

            push( @re, $letrafinal );

        }
        else {
            push( @re, " " );
        }
    }

    return @re;

}

# The End ?

Noviembre 28, 2014, 04:08:20 PM #1 Ultima modificación: Noviembre 28, 2014, 04:14:21 PM por Juan
Hola Doddy! espero que ahora no te  tomes a mal mis consejos.  :)

Es conveniente que programes con use strict, ya que tienes muchas variables sin declarar y te puedes liar con el nombre de las variables al programar.

En algunas líneas para realizar la pausa usas stdin de esta manera:

Código: perl
<STDIN>;


Puedes poner simplemente esto: <>; y te va a funcionar igual y es mas corto  :P

También tienes algunas lineas de código de más, como por ejemplo estas:

Código: perl
$letrafinal =~ s/{/a/;
$letrafinal =~ s/\|/b/;
$letrafinal =~ s/}/c/;


Que la puedes dejar solo en una con la función tr.

un saludo.

Código: php
#!/usr/bin/perl