Underc0de

Programación Scripting => Perl => Mensaje iniciado por: BigBear en Noviembre 28, 2014, 01:48:09 PM

Título: [Perl] Ejemplo de Cifrado Cesar
Publicado por: BigBear en Noviembre 28, 2014, 01:48:09 PM
Un simple ejemplo de como hacer en cifrado cesar en Perl.

El codigo :

Código (perl) [Seleccionar]

# !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 ?
Título: Re:[Perl] Ejemplo de Cifrado Cesar
Publicado por: Juan en Noviembre 28, 2014, 04:08:20 PM
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) [Seleccionar]
<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) [Seleccionar]
$letrafinal =~ s/{/a/;
$letrafinal =~ s/\|/b/;
$letrafinal =~ s/}/c/;


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

un saludo.

#!/usr/bin/perl
Título: Re:[Perl] Ejemplo de Cifrado Cesar
Publicado por: BigBear en Noviembre 28, 2014, 04:11:56 PM
ok , gracias por las sugerencias.