• Publicidad

GnuPG-Interface

Aquí encontrarás todo lo que sea específicamente acerca de módulos de Perl. Ya sea que estás compartiendo tu módulo, un manual o simplemente tienes una duda acerca de alguno.

GnuPG-Interface

Notapor situ » 2009-03-12 13:16 @594

Buenas, estoy tratando de poder encriptar/desencriptar usando GPG con Perl pero no lo logro. Encontré este módulo pero no me funciona el script :s ¿Alguien me puede ayudar? :s

Saludos-

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  use IO::Handle;
  use GnuPG::Interface;

  my @original_plaintext = ( "marcos" );
  my $passphrase = "miclave";

  my $gnupg = GnuPG::Interface->new();

  $gnupg->options->hash_init( armor    => 1,
                              recipients => [ '[email protected]',
                                              '0xFBDFC613' ],
                              meta_interactive( 0 ),
                            );

  my ( $input, $output ) = ( IO::Handle->new(),
                             IO::Handle->new() );

  my $handles = GnuPG::Handles->new( stdin    => $input,
                                     stdout   => $output );

  my $pid = $gnupg->encrypt( handles => $handles );

  print $input @original_plaintext;

  close $input;

  my @ciphertext = <$output>;  

  waitpid $pid, 0;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Información: GnuPG::Interface
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Publicidad

Notapor explorer » 2009-03-12 20:19 @888

Hay un error en la documentación, y lo has copiado tal cual. Es en el momento de crear el hash_init(). El atributo meta_interactive() está mal escrito.

Tienes dos opciones: o indicas el nivel de interactividad después de crear el hash_init() con una sentencia como
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$gnupg->options->meta_interactive( 0 );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
(como se indica en la sinopsis), o lo indicas en el mismo hash_init:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$gnupg->options->hash_init( armor    => 1,
                            recipients => [
                                '0x6D2FF8B5',
                            ],
                            meta_interactive => 1,
);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Falta una línea más, que muestre, al final, el texto cifrado:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print "@ciphertext\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Si ejecuto el programa, sale:
Código: Seleccionar todo
gpg: 9AD4066C: No hay seguridad de que esta clave pertenezca realmente
al usuario que se nombra
gpg: [stdin]: encryption failed: Unusable public key

El problema es el siguiente: gpg no se fía de la validez de la clave que ha encontrado en el repositorio de claves, y primero nos avisa, y luego nos pregunta si queremos aceptarla o no. PERO esa pregunta no la vemos porque, en el programa, estamos usando la entrada estándar y la salida estándar para intercambiar información con gpg de forma directa del texto que queremos codificar. No hemos hablado nada de que gpg nos haga una pregunta y tengamos que responderle. Por eso, gpg se muere con el último mensaje de error.

Si, en el programa, cambiamos el valor de meta_interactive de 0 a 1, entonces sí que nos lo pregunta:
Código: Seleccionar todo
gpg: 9AD4066C: No hay seguridad de que esta clave pertenezca realmente
al usuario que se nombra

pub  2048g/9AD4066C 2003-10-17 Javier Barrio <[email protected]>
 Huella de clave primaria: 1F42 1E88 A25C 6D5B F7EA  8B26 7A29 F65D 6D2F F8B5
      Huella de subclave: 662A 98AE 3DA6 9351 0C84  78E6 FB2E B73C 9AD4 066C

No es seguro que la clave pertenezca a la persona que se nombra en el
identificador de usuario. Si *realmente* sabe lo que está haciendo,
puede contestar sí a la siguiente pregunta.

¿Usar esta clave de todas formas? (s/N) s
-----BEGIN PGP MESSAGE-----
 Version: GnuPG v2.0.9 (GNU/Linux)

 hQIOA/sutzya1AZsEAf/atGGWweGNDhHYdyC2owkCTrZXfQ9frr+Uq14XTGMkYLr
 ag7eJbS6ZWWBFPnEVLD1vvWHNM8iCQhN6/Zf7kEyBHT1Yz/kspsz2pWfyDtXTCKu
 IGvXZAjbDPK3CDAQ5ox1H5iH7UTc5eQVNr/8GyWX0Hd/cBQLH8Ykfyqdz+xrnGWS
 apVyh8NSfmvLde2uNOAefd6SYDlTAkn9EMognVysrjF+SflDp0heuZzckGLNkyj0
 3awObp6WN1NDw3LSydpkVYnqISGZfBD32D/TmDzPpirfeKTUUP9XgkVL/b334KoS
 5qa+1ZbdjLEEGhGf/J8zDE3j1IQ7CSm/5ylUL1pSQAf+KXWr5GXh2GZ6ilzBijPd
 /ymw9Fp3XpN3DWx1AhTuDv4a7bJPRKiFyTNlGouh+YDmgqzHVz2IlrPVb/3fbTuV
 thX63qQUYCE4V3z+pIeckDw+LNzFcCui41MOX2qtb4X+LqYlf+3VrYvv6MqNkb+z
 XNuuNfVNr4oIFabUTLheRyIh/guFubni3YF4X6xgkympnS9EcKZhvzYoPK13zevq
 zgDnACtKY6AloDEiXtZ2TYeHx8gFcfFnOf9i8wcSZderHb2ODJF45Tq2r3T+BBXD
 +vg3OPNe9kuIcdLRm85LXm5ve4cc0HDJUgqUnHQCO0B1993mMkuqQBkkTuNrxdJI
 F9JBAZnit8OWHVixaLYkIxEwR3aVu9kxCBqYcA3OimSIV36e59NME7lqePfHWHig
 dlCybWKiiH8cGLHTzaNbQ23r3jY=
 =fP2L
 -----END PGP MESSAGE-----


Más ideas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14477
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor situ » 2009-03-13 07:01 @334

¡Muchas Gracias! Un lujo el foro, como siempre :D
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

En Linux no me funciona

Notapor situ » 2009-03-23 07:55 @371

Les molesto nuevamente porque estoy teniendo un problema: una de las funcionalidades del script es mostrarme el contenido del xml.

Para realizar este procedimiento se debe pasar como parámetro -n=pc
Ej.: perl archivo.pl -n=marcos
Esto me funciona en Windows pero no así en Linux, ¿alguien me puede ayudar?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -s
## Si al ejecutarlo obtengo el siguiente error: could not find ParserDetails.ini in C:/Perl/site/lib/XML/SAX
## ejecuto esto y se soluciona: perl -MXML::SAX -e "XML::SAX->add_parser('XML::SAX::PurePerl')->save_parsers()"
use POSIX qw(strftime);
my $hday= strftime("%Y%m%d", localtime);
no warnings;

##Verificacion del modulo XML::Simple
BEGIN {
    eval "use XML::Simple";
    if ( $@ ) {
        warn  "Error al cargar el modulo: XML::Simple\n"
            . "Instalar Modulo:\n"
            . "\t\tcpan --> install XML::Simple\n\n";
        exit();
    }
}

##Verificacion del modulo GnuPG::Interface
BEGIN {
    eval "use GnuPG::Interface";
    if ( $@ ) {
        warn  "Error al cargar el modulo: GnuPG::Interface\n"
            . "Instalar Modulo:\n"
            . "\t\tcpan --> install GnuPG::Interface\n\n";
        exit();
    }
}

our $c;
our $n;
our $ip;
our $u;
our $d;
our $url;
our $reporte;
our $h;

use IO::Handle;
use GnuPG::Interface;

## Ayuda del sistema
if ( !$n and !$ip and !$u and !$c and !$d and !$reporte and !url and !h) {
    die "Uso: $0 [-n|-ip|-u|-c|-n -u -d]\n"
      . "[+] -n=pc                           Busqueda por nombre del host\n"
      . "[+] -ip=1.1.1.1                     Busqueda por direccion IP\n"
      . "[+] -url=https://10.0.0.1           Busqueda por url\n"
      . "[+] -c                              Adjuntar nuevos contenidos\n"
      . "[+] -n=pc -u=admin -d               Desencriptar password\n"
      . "[+] -reporte                        Generamos un reporte en formato HTML\n"
      . "[-] Tip -> Se pueden utilizar regex en las busquedas\n"
      ;
}

my $info = XMLin('kk.xml', KeyAttr => 1, ForceArray => [ 'user' ]);

## Desencripto la password
if ( $n and $u and $d ) {
for my $pc ( @{$info->{technology}{pc}} ) {
        next if $pc->{name} !~ /^$n$/;
        for my $user ( @{$pc->{user}} ) {
        next if $user->{name} !~ /^$u$/;
                 open  (my $PWD , "> $n.$u.pw.asc");   
                print $PWD "$user->{password}\n";
                close ($PWD);
 print "- Ingresar password de la key gpg\n";
         system("gpg --no-options  -a -o intecambio.desc $n.$u.pw.asc");
    open my $FILE, '<', "intecambio.desc" or die $!;
    my $lines = <$FILE>;
    close $FILE;
    for my $pc ( @{$info->{technology}{pc}} ) {
        next if $pc->{name} !~ /^$n$/;
        print "$pc->{name} => $pc->{url} ($pc->{ip})\n";
        for my $user ( @{$pc->{user}} ) {
            next if $user->{name} !~ /^$u$/;
            print "\t    $user->{name} : $lines\n";
            system("del intecambio.desc");
            system("del $n.$u.pw.asc");
            exit ();
        }
    }
        }
    }
}

## Creo un reporte
elsif ( $reporte ) {
open (F,">> reporte.html");
print F "<html><head>\n";
print F "<meta http-equiv=Content-Type content='text/html;charset=iso-8859-1' />\n";
print F "<title>Equipos Cargados - GPG</title>\n";
print F "</head>\n";
print F "<body>\n";
print F " <table border='0' align=center width=650 cellpadding='0' cellspacing='0' bgcolor=#000000>\n";
print F "  <tr>\n";
print F "  <td rowspan=4  width=10%>&nbsp;</td>\n";
print F "  <td><font color=#ffffff face=Verdana size=1>Reporte de los equipos cargados - $hday</font></td></tr><br>\n";
print F " </table>\n";


    for my $pc ( @{$info->{technology}{pc}} ) {
        next if $n  and $pc->{name}  !~ /^$n$/;
        next if $i  and $pc->{ip}    !~ /^$ip$/;
        next if $url  and $pc->{url}   !~ /^$url$/;
        next if $u  and $pc->{user}   !~ /^$u$/;
        print F "<table border='0' align=center width=700 cellpadding='0' cellspacing='0' bgcolor=#f2f2f2>\n";
        print F "<tr><td><font color=#ff0000 face=Verdana size=1>$pc->{name} => </font><font color=#000000 face=Verdana size=1>$pc->{url} ($pc->{ip})</a></font></td></tr>\n";
        for my $user ( @{$pc->{user}} ) {
        print F "<tr><td><font color=#000000 face=Verdana size=1>\t    $user->{name} : encriptado</a></font></td></tr>\n";

        }
    }
print F " </table>\n";
print F " <table border='0' align=center width=650 cellpadding='0' cellspacing='0' bgcolor=#000000>\n";
print F "  <tr>\n";
print F "  <td rowspan=4  width=10%>&nbsp;</td>\n";
print F " </table>\n";
}


## Cree nuevo Host
elsif ( !$c ) {
    for my $pc ( @{$info->{technology}{pc}} ) {
        next if $n  and $pc->{name}  !~ /^$n$/;
        next if $i  and $pc->{ip}    !~ /^$ip$/;
        next if $u  and $pc->{url}   !~ /^$u$/;
        print "$pc->{name} => $pc->{url} ($pc->{ip})\n";

        for my $user ( @{$pc->{user}} ) {
            print "\t    $user->{name} : encriptado\n";

        }
    }
}


else {
                no warnings;

 print "- Ingresar nombre del Host: ";
    my $hname=<STDIN>;
    chop($hname);
    print "- Ingresar url: ";
    my $hurl=<STDIN>;
    chop($hurl);
    print "- Ingresar IP: ";
    my $hip=<STDIN>;
    chop($hip);
    print "- Ingresar notas: ";
    my $hnota=<STDIN>;
    chop($hnota);
  while ( 'el usuario no entre un FIN' ) {
    print "- Nombre de usuario (FIN para terminar):";
    chomp(my $huser = <>);
    last if $huser eq 'FIN';
   
#######################################################################################
## Creacion del archivo del password y la encriptacion
    print "- Ingresar password (el password no aparece): ";
    my $hpass=<STDIN>;
    chop($hpass);
    my @original_plaintext = ( "$hpass" );
    my $passphrase = "marcog";
    my $gnupg = GnuPG::Interface->new();
    $gnupg->options->hash_init( armor    => 1,
                            recipients => [
                                '0x04A94897',
                            ],
                            meta_interactive => 1,
);

    my ( $input, $output ) = ( IO::Handle->new(),
                             IO::Handle->new() );
    my $handles = GnuPG::Handles->new( stdin    => $input,
                                     stdout   => $output );
    my $pid = $gnupg->encrypt( handles => $handles );
    print $input @original_plaintext;
    close $input;
    my @ciphertext = <$output>;
    waitpid $pid, 0;
#######################################################################################
## Envio los datos nuevos creados por el usuario
   push @{$info->{technology}{pc}}, {
        name    => $hname,
        url     => $hurl,
        ip      => $hip,
        user    => [{
                        name    => $huser,
                        password=> "@ciphertext",
                        date    => $hday,
                    }],
        notes   => $hnota,
    };
        }
#Escribo sobre el archivo xml la salida
open  my $SV, q{>:encoding(iso-8859-1)}, 'kk.xml';
print $SV XMLout($info, RootName => 'owner', XMLDecl => 1, NoAttr => 1 );
close ($SV);
}
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4



Sintáxis: [ Descargar ] [ Ocultar ]
  1. <?xml version='1.0' standalone='yes'?> 
  2. <owner> 
  3. <technology> 
  4. <name>test</name> 
  5. <pc> 
  6. <name>marcos</name> 
  7. <ip>10.1.1.1</ip> 
  8. <notes>test</notes> 
  9. <url>https://10.1.1.1</url> 
  10. <user> 
  11. <name>admin</name> 
  12. <date>20080101</date> 
  13. <password>123</password> 
  14. </user> 
  15. <user> 
  16. <name>root</name> 
  17. <date>20080101</date> 
  18. <password>123</password> 
  19. </user> 
  20. </pc> 
  21. </technology> 
  22. </owner> 


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

Notapor explorer » 2009-03-23 08:26 @393

El problema está en la forma de invocar la ejecución del programa.

Si pones el '-s' en la cabecera del programa, es porque quieres que el intérprete perl lea esa línea, la interprete, y active la opción '-s'.

Pero... si lo ejecutas como perl archivo.pl -n=marcos entonces perl NO interpretará esa primera línea (estás arrancando un perl de forma directa en lugar de que sea el sistema el que lo haga)

Tienes varias opciones:
  1. Ejecutarlo como ./archivo.pl -n=marcos. Si el $PATH es correcto, entonces te vale con archivo.pl -n=marcos (quitamos el ./ inicial).
  2. Quitar (opcionalmente) el '-s' de la primera línea y ejecutarlo como perl -s archivo.pl -n=marcos.
Última edición por explorer el 2009-03-23 11:40 @528, 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: 14477
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor situ » 2009-03-23 08:52 @411

No me funciona :S
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Notapor explorer » 2009-03-23 09:00 @416

¿Qué es lo que has probado?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14477
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor situ » 2009-03-23 09:21 @431

Probé lo siguiente:
Código: Seleccionar todo
admin@kabuto:~$ perl gpg.pl -s -n="marcos"
admin@kabuto:~$ perl gpg.pl -s -n=marcos
admin@kabuto:~$ perl gpg.pl  -n=marcos


Por lo que veo en el debug hace un loop en la parte del nombre.
Pero lo raro que en Windows me funciona bien, en Linux es el problema.

Código: Seleccionar todo
admin@kabuto:~$ perl -d marcos.pl -s -n=marcos

Loading DB routines from perl5db.pl version 1.28
Editor support available.

Enter h or `h h' for help, or `man perldebug' for more help.

main::(marcos.pl:5):    my $hday= strftime("%Y%m%d", localtime);
  DB<1> n
main::(marcos.pl:30):   our $c;
  DB<1>
main::(marcos.pl:31):   our $n;
  DB<1>
main::(marcos.pl:32):   our $ip;
  DB<1>
main::(marcos.pl:33):   our $u;
  DB<1>
main::(marcos.pl:34):   our $des;
  DB<1>
main::(marcos.pl:35):   our $url;
  DB<1>
main::(marcos.pl:36):   our $reporte;
  DB<1>
main::(marcos.pl:37):   our $h;
  DB<1>
main::(marcos.pl:43):   if ( !$n and !$ip and !$u and !$c and !$des and !$reporte and !url and !h) {
  DB<1>
main::(marcos.pl:55):   my $info = XMLin('kk.xml', KeyAttr => 1, ForceArray => [ 'user' ]);
  DB<1>

main::(marcos.pl:58):   if ( $n and $u and $des ) {
  DB<1> main::(marcos.pl:123):      for my $pc ( @{$info->{technology}{pc}} ) {
  DB<1>
main::(marcos.pl:123):      for my $pc ( @{$info->{technology}{pc}} ) {
  DB<1>
main::(marcos.pl:124):          next if $n  and $pc->{name}  !~ /^$n$/;
  DB<1>
main::(marcos.pl:124):          next if $n  and $pc->{name}  !~ /^$n$/;
  DB<1>
main::(marcos.pl:124):          next if $n  and $pc->{name}  !~ /^$n$/;
  DB<1>
main::(marcos.pl:124):          next if $n  and $pc->{name}  !~ /^$n$/;
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Notapor explorer » 2009-03-23 10:52 @495

Prueba con
Código: Seleccionar todo
admin@kabuto:~$ perl -s gpg.pl -n="marcos"
admin@kabuto:~$ ./gpg.pl -n="marcos"


El que no funciona es
Código: Seleccionar todo
admin@kabuto:~$ perl kk.pl -s -n="marcos"


Todas ellas me funciona en mi Linux.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14477
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor situ » 2009-03-23 11:51 @536

Muchas Gracias me funciona correctamente, el procedimiento de encriptar también pero el que no me está funcionando es el de desencriptar, el script es de arriba y me basé en la documentación:
http://cpan.uwinnipeg.ca/htdocs/GnuPG-I ... rface.html

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

Siguiente

Volver a Módulos

¿Quién está conectado?

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

cron