Mar Nov 01, 2005 2:15 pm
|
 |
sudo
Perlero Nuevo

|
Registrado: 01 Oct 2005
Mensajes: 14
|
|
| encriptador por bits |
|
|
Hola forer@s!
Hace rato hice un encriptador/decryptador que hacía su función por caracteres, ahora lo quiero hacer por bits.
Entonces mi pregunta es la siguiente:
¿Cómo encripto por bits, SIN usar algún módulo de CPAN?
Gracias.
 |
|
|
|
Mar Nov 01, 2005 2:57 pm
|
 |
explorer39
Perlero Frecuente

|
Registrado: 23 Ago 2005
Mensajes: 126
Ubicación: Valladolid, España
|
|
|
|
|
| Puedes utilizar las funciones pack, unpack y vec. |
|
Mie Nov 02, 2005 2:18 pm
|
 |
sudo
Perlero Nuevo

|
Registrado: 01 Oct 2005
Mensajes: 14
|
|
|
|
|
Hola.
No mira, yo lo que quiero es saber como encripto por entrada de bits, es decir:
Tengo un binario o un .elf, lo quiero encriptar, pero claro esta, tengo que saber el orden de bits por el que inicia hasta en el que termina el binario/elf.
Entonses como se por donde iniciar?
Cuantos bits escribir al decriptarlo?
El orden de los caracteles?
Yo se que estas funciones es para trabajar con ASCii, pero no se como guardar o escibir por orden bits, como un binario.
Gracias, de nuevo!  |
|

Mie Nov 02, 2005 2:47 pm
|
 |
explorer39
Perlero Frecuente

|
Registrado: 23 Ago 2005
Mensajes: 126
Ubicación: Valladolid, España
|
|
|
|
|
Que si, que si... que vec sirve para tratar bits en cadenas de bytes almacenadas en strings... y con pack/unpack puedes leer ristras de bytes.
Abres el fichero que quieres encriptar. Haces un bucle hasta el final del fichero. Leer una ristra de bits según unpack. Encriptas con vec. Almacenas en otro fichero con pack. Listo
Todo dependerá de tu método de encriptación. |
|
Mie Nov 02, 2005 5:37 pm
|
 |
sudo
Perlero Nuevo

|
Registrado: 01 Oct 2005
Mensajes: 14
|
|
|
|
|
OK, digamos que vec me solucione el prloblema, pero... Si quiero decriptarlo?
Bien, otra dudilla, la fincion crypt() es decriptable?
Gracias, salu2! |
|
Mie Nov 02, 2005 6:42 pm
|
 |
monoswim
Vive para Perl en Español

|
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
|
|
|
|
|
No, la función crypt() es una función solo de ida, no de vuelta...
Sirve mucho para por ejemplo encriptar passwords y luego verificas si el password es correcto encriptando el que coloca el usuario y comparrando ambos passwords encriptados...Pero no se puede desencriptar...
Saludos |
|
Vie Nov 04, 2005 5:03 pm
|
 |
sudo
Perlero Nuevo

|
Registrado: 01 Oct 2005
Mensajes: 14
|
|
|
|
|
| Código: |
open FL, "text";
my @lines = <FL>;
my $aline;
my $a = 0;
close FL;
foreach(0 .. $#lines) {$aline = "$aline$lines[$a++]";}
my $palabras = unpack("b*", $aline);
print "$palabras\n";
my $all = pack("b*", $palabras);
open QT, "+>txt.dat";
print QT "$all";
close QT; |
Funciona al 100%. ¡gracias a todos!
salu2 |
|
Jue Ago 30, 2007 6:50 am
|
 |
aramallal
Perlero Nuevo

|
Registrado: 12 Jun 2007
Mensajes: 63
|
|
|
|
|
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. |
|

Jue Ago 30, 2007 11:34 am
|
 |
monoswim
Vive para Perl en Español

|
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
|
|
|
|
|
| Perl: | open FL, "text"; # abre al archivo...
my @lines = <FL>; # guarda toda la info del archivo en el array @lines
my $aline;
my $a = 0; # crea 2 variables que se utilizarán luego
close FL; # cierra el archivo
foreach(0 .. $@lines) {$aline = "$aline$lines[$a++]"; } # deja toda la info del archivo en un string $aline (modifiqué un error que había en el código)
my $palabras = unpack("b*", $aline); # desencripta la info...
print "$palabras\n"; # imprime la info en Humano
my $all = pack("b*", $palabras); # vuelve a encriptar la info para luego guardarla en el archivo
open QT, "+>txt.dat";
print QT "$all";
close QT; |
Espero que te sirva
Saludos |
|

Jue Ago 30, 2007 2:39 pm
|
 |
creating021
Vive para Perl en Español

|
Registrado: 23 Feb 2006
Mensajes: 486
Ubicación: Frente al monitor
|
|
|
|
|
| aramallal escribió: | 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...
Eso sería, bueno no sé que sería pero es mejor que uses PGP y Blowfish
 |
|
Vie Ago 31, 2007 12:25 am
|
 |
aramallal
Perlero Nuevo

|
Registrado: 12 Jun 2007
Mensajes: 63
|
|
|
|
|
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. |
|
Vie Ago 31, 2007 1:16 am
|
 |
aramallal
Perlero Nuevo

|
Registrado: 12 Jun 2007
Mensajes: 63
|
|
|
|
|
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. |
|
Vie Ago 31, 2007 1:44 am
|
 |
aramallal
Perlero Nuevo

|
Registrado: 12 Jun 2007
Mensajes: 63
|
|
|
|
|
| vale ya lo entiendo perfectamente.Gracias .... |
|

Vie Ago 31, 2007 2:44 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4127
Ubicación: Valladolid, España
|
|
|
|
|
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: |
#
# Lista de usuarios y contraseñas
#
aramalla:blowfish
joaquin:anguloso |
con el siguiente programa:
| Perl: | #!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__ |
la salida es:
| Código: |
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. |
|

Powered by phpBB © 2001, 2005 phpBB Group
|