• Publicidad

encriptador por bits

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Notapor creating021 » 2007-08-30 15:39 @693

aramallal escribiste:Podríais explicarme este código, por favor.
Por que lo que necesito es encriptar un fichero de texto pero no sé cómo hacerlo.

Mi script se encargará de leer la información desencriptando el fichero.

Un millón de gracias y un saludo.

Realmente no te lo recomiendo, es que estaba aprendiendo... :lol:

Eso sería, bueno no sé que sería pero es mejor que uses PGP y Blowfish
:oops:
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Publicidad

Notapor aramallal » 2007-08-31 01:25 @100

Muchas gracias a todos.

Creo que intentaré el que me habéis dejado aquí.

Me estoy quedando sin tiempo y ya le he dedicado mas de dos dias a esto sin sacar nada en claro, bueno sí, que utilice pgp y blowfish pero no entiendo la documentación de cómo utilizarlos.

Asi que probaré con el que me habéis dejado. Gracias y un saludo.
aramallal
Perlero nuevo
Perlero nuevo
 
Mensajes: 63
Registrado: 2007-06-12 06:29 @312

Notapor aramallal » 2007-08-31 02:16 @136

el fichero que utilizo en: open FL, "txt"


Debería tener mi usuario y mi password cifrado como lo hago?

os lo digo porque para hacer una prueba yo he puesto cisco cisco .

Entonces el programa parece que lo cifra me li imprime por pantalla y lo guarda en el "txt.dat" como esta en el original " cisco cisco".


No entiendo el sentido de esto. alguien me lo puede explicar.
aramallal
Perlero nuevo
Perlero nuevo
 
Mensajes: 63
Registrado: 2007-06-12 06:29 @312

Notapor aramallal » 2007-08-31 02:44 @155

vale ya lo entiendo perfectamente.Gracias ....
aramallal
Perlero nuevo
Perlero nuevo
 
Mensajes: 63
Registrado: 2007-06-12 06:29 @312

Notapor explorer » 2007-08-31 03:44 @197

A ver si esto te sirve.

Estoy usando el módulo Crypt::Blowfish, que es sencillo, solo codifica en bloques de 8 bytes, por lo que nos servirá para codificar nombres de usuarios y sus contraseñas de justo ese tamaño (o menor).

El módulo me lo he bajado de la Universidad de Winnipeg, con la ayuda del instalador PPM (en Windows) en un minuto. Si estás en un Unix/Linux, prueba con el comando cpan.

Si tenemos por ejemplo este fichero, usuarios.txt:
Código: Seleccionar todo
#
# Lista de usuarios y contraseñas
#
aramalla:blowfish
joaquin:anguloso

con el siguiente programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!Perl
use Crypt::Blowfish;

my $clave = 'asquerRs';                   # Clave para cifrar/descifrar

#########################################################################
print "Codificando:\n";
my $cifra = Crypt::Blowfish->new($clave);

# Abrimos el fichero
open my $fh, '<', 'usuarios.txt'
    or die "ERROR: no puedo abrir el fichero de usuarios original: $!\n";

# Escribimos en el fichero de salida
open my $ch, '>', 'usuarios.blw'
    or die "ERROR: no puedo escribir en el fichero de salida: $!\n";

# lo leemos línea a línea, encriptando
while ( <$fh> ) {

    chomp;

    next if m/^ \s* \#/ximo;    # Obviamos líneas vacías o comentarios

    if ( my ($usuario,$contrasena) = split q{:} ) {

        print "$usuario:$contrasena=>";
        $usuario    = codifica( $usuario );
        $contrasena = codifica( $contrasena );
        print "$usuario:$contrasena\n";

        # Lo escribimos. El resultado siempre es de 8 caracteres cada uno
        print $ch "$usuario$contrasena\n";
    }
}

# Fin de la codificación
close $fh;
close $ch;

print "\n";

#########################################################################
print "Decodificando:\n";
my $descifra = Crypt::Blowfish->new($clave);

# Abrimos el fichero codificado
open my $dh, '<', 'usuarios.blw'
    or die "ERROR: no puedo abrir el fichero codificado: $!\n";

# lo leemos línea a línea, desencriptando
while ( <$dh> ) {

    chomp;

    # Las líneas son dos bloques de 8 caracteres cada uno
    if ( my ($usuario,$contrasena) = unpack "A8 A8", $_ ) {

        print "$usuario:$contrasena=>";
        $usuario    = decodifica( $usuario );    # Decodificamos
        $contrasena = decodifica( $contrasena ); # Decodificamos
        print "$usuario:$contrasena\n";
    }
}

# Fin de la decodificación
close $dh;

#########################################################################
sub codifica {
    my $que = shift;
    $que = substr $que."\0"x8,0,8;               # Ajustamos a 8 caracteres, relleno con ceros
    return $cifra->encrypt($que);                # Codificamos y devolvemos el resultado
}

sub decodifica {
    my $que = shift;
    $que = $descifra->decrypt($que);             # Decodifica
    $que =~ s/\0+$//;                            # y quitamos los ceros de relleno
    return $que;
}
__END__
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4

la salida es:
Código: Seleccionar todo
Codificando:
aramalla:blowfish=>ˆÓדó¼ÛT:¶Ù[Y³Fì
joaquin:anguloso=>dPò)`Î�:Åk@¼­Õ

Decodificando:
ˆÓדó¼ÛT:¶Ù[Y³Fì=>aramalla:blowfish
dPò)`Î�:Åk@¼­Õ=>joaquin:anguloso


Funciona. El fichero usuarios.txt es codificado a usuarios.blw. Y luego, decodificado, para sacar su contenido original.

Lo que tienes que hacer es sacar dos programas de este: uno para codificar solamente, y el otro para decodificar y usar la información para trabajar. El fichero usuarios.txt deberás guardarlo en sitio seguro, claro.

Si queremos codificar texto de más longitud de 8 caracteres habría que dividirlo en bloques de ese tamaño y hacer un bucle por ellos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor creating021 » 2007-08-31 17:35 @774

Yo comenté a PGP para crear una firma del archivo (podés usar SHA) por cuestiones de seguridad (si es algo importante, claro).

Los sistemas de emcriptación más famosos son AES, Blowfish, Towfish y RSA (seguro que hay más) pero creo que el mejor es RSA, solo mira en la wikipedia.

Deberías de ver Crypt::* para ver cientos de opciones pero con el que pone explorer debería ser suficiente.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Anterior

Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron