• Publicidad

Cifrar carpetas

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Cifrar carpetas

Notapor Norther » 2007-11-29 14:35 @649

Como sabéis gpg no soporta la encriptación de carpetas, así que decidí hacerme un par de funciones para ello en Bash, la cosa no cuajaba y decidí hacerlas en Perl.

Las pongo aquí con la esperanza de que me ayudéis a resolver un pequeño problema que indico en los comentarios del código (no sé cómo parar el script en caso de que la clave introducida sea errónea para evitar que borre los archivos), y de paso si alguien se apunta me encantaría ver como haríais vosotros esto mismo en Perl pero con mas estilo :P

Ahí va:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

my $error = 1;

my $encript = "$ARGV[0].tar";

if (-d $ARGV[0]) {
        system("tar -cvvf $encript $ARGV[0]") or ($error = 0); # El die aqui no me funcionaba asi que puse una bandera.
        if($error =~ 0) {
                system("gpg -ac --no-options $encript");
                system("rm -r $ARGV[0]");
                system("rm -r $encript");
        } else {
                print "Se ha abortado debido a un error.\n";
        }      
} else {
        print "No es una carpeta!!!\n";
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Y la función para desencriptar:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

my $fix = $ARGV[0];

$fix =~ s/\W.+/.tar/g;

if($ARGV[0] =~ /tar/ && $ARGV[0] =~ /asc/) {
        system("gpg --no-options $ARGV[0]") or ($error = 1); # ¿Como puedo detectar aqui si introduce la contraseña mal para parar el código?
        system("tar -xvvf $fix");
        system("rm $fix");
        system("rm $ARGV[0]");
} else {
        print "No es una carpeta encriptada válida.\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Los scripts básicamente cogen el archivo, lo meten en un tar para poder cifrarlo con gpg, y eliminan tanto el archivo original como los creados durante el proceso a excepción del encriptado para dejar solo este último.

Ya sé que es una chapuza porque básicamente hice Bash en Perl para poder utilizar las expresiones regulares en Perl que se me dan mejor, por eso resultaría interesante que posteaseis alternativas a estos código (pero haciendo el mismo proceso que ellos en esencia).

Muchas gracias ;)
Norther
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2007-07-24 13:47 @616
Ubicación: Asturias

Publicidad

Notapor creating021 » 2007-11-29 16:25 @726

Pero... ¿ A quien se le ocurre poner un password en un argv ?
¿ Y si ejecutan history... ?

Creo que vía STDIN es mejor y lee esto:

POSIX::Termios: Ocultando input en 25 líneas

Creo que tengo algo de paranoia, pero eso resuelve la duda :lol:
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

Notapor Norther » 2007-11-29 16:47 @741

hum, creo que no entendiste bien lo que hace mi script, el ARGV[0] no es la contraseña sino el archivo, el uso seria:

Código: Seleccionar todo
$ encryptf <archivo>

$ decryptf <archivo>


Ejemplo:

Código: Seleccionar todo
norther@norther-desktop:~/Desktop$ mkdir wi
norther@norther-desktop:~/Desktop$ encryptf wi
drwxr-xr-x norther/norther   0 2007-11-29 22:49 wi/
Introduzca frase contraseña:   (la contraseña la controla el GPG no mi script asi que no se muestra ni se queda guardada en history)


Código: Seleccionar todo
norther@norther-desktop:~/Desktop$ mkdir wi
norther@norther-desktop:~/Desktop$ encryptf wi
drwxr-xr-x norther/norther   0 2007-11-29 22:49 wi/
norther@norther-desktop:~/Desktop$ decryptf wi.tar.asc
gpg: datos cifrados CAST5
gpg: cifrado con 1 frase contraseña
gpg: ATENCIÓN: la integridad del mensaje no está protegida
norther@norther-desktop:~/Desktop$ 


Échale un ojo a mi código y luego a estos ejemplos que seguro que te enteras mejor, me explico muy mal :P

El problema es que si introduces una contraseña incorrecta, el sistema, gpg se entera y no te deja desencriptar el archivo, pero mi script no se entera y ni se inmuta, continua normalmente, por lo que borra los ficheros originales pensando que ya no son de utilidad, lo que necesito es saber cómo hacer que mi sistema se entere de que GPG se enteró de que la contraseña es incorrecta para salir inmediatamente del script :P
Norther
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2007-07-24 13:47 @616
Ubicación: Asturias

Notapor explorer » 2007-11-29 17:19 @763

Hay que leer un poco más... que estamos en el foro Intermedio... :-)

system() devuelve el resultado de la operación, pero de una forma peculiar: en los 8 bits más altos.

Te recomiendo que mires el ejemplo que hay en la explicación de system(). En tu caso, sería ver si ($? >> 8) vale 0 -todo bien-, u otra cosa -algún fallo-.

Y claro... eso también quiere decir que hemos leído la página de manual de gpg y sabemos lo que significan los números devueltos.
Última edición por explorer el 2007-11-29 17:25 @767, editado 1 vez en total
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Norther » 2007-11-29 17:22 @765

El GPG si que tuve que leerlo y comprenderlo entero anteriormente, pero reconozco que no había echado un ojo al manual de system :$

Voy a ello, muchas gracias ;)
Norther
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2007-07-24 13:47 @616
Ubicación: Asturias

Notapor situ » 2007-11-30 14:25 @642

Norhter,
Te paso la dirección de mi blog donde posteé un script que te puede ayudar:
http://www.wikipeando.com/index.php/archives/311

Saludos.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Notapor Norther » 2007-11-30 17:34 @773

Gracias Situ, voy a echarle un ojo a ver si me da nuevas ideas pero lo que son mis códigos los terminé ayer, la verdad me habría gustado que lo hicieran todo de un modo algo más transparente, pero al menos cumplen su función :P

Encryptf ()
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

my $error = 1;

my $aux = $ARGV[0];

$aux =~ s/\W//g;

my $encript = "$aux.tar";

if (-d $ARGV[0]) {
        system("tar -cvvf $encript $ARGV[0]") || ($error = 0); 
       
        if($error =~ 0) {
                system("gpg -ac --no-options $encript");
               
                if($? != 0) {  
                        system("rm $encript");
                        exit 1;
                }
               
                system("rm -r $ARGV[0]");
                system("rm -r $encript");
               
        } else {
                print "Se ha abortado debido a un error.\n";
        }      
       
} else {
        print "No es una carpeta!!!\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Decryptf ()
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

my $fix = $ARGV[0];

$fix =~ s/\W.+/.tar/g;

if($ARGV[0] =~ /tar/ && $ARGV[0] =~ /asc/) {
        system("gpg --no-options $ARGV[0]");
       
        if($? != 0) {  
                exit 1;
        }
       
        system("tar -xvvf $fix");
        system("rm $fix");
        system("rm -r $ARGV[0]");
       
} else {
        print "No es una carpeta encriptada válida.\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Norther
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2007-07-24 13:47 @616
Ubicación: Asturias

Notapor situ » 2007-12-04 16:51 @743

Norther,

¿Puedo publicar este script en otro sitio?. te envié un privado. Pero no respondiste...

Saludos
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Notapor Norther » 2007-12-04 17:41 @778

Perdona no suelo mirar los mensajes privados (creo que es el segundo que recibo en el tiempo que llevo en estos foros O_o)

Por mi no hay ningún problema, para eso lo postee aquí :) De todas formas siempre sería de agradecer que hicieras referencia al autor y web de origen ya que el script esta hecho de cero. (Norther & http://perlenespanol.com)
Norther
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2007-07-24 13:47 @616
Ubicación: Asturias


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 12 invitados