2014-12-30 23 views
6

Sto provando a firmare i miei dati usando Crypt::OpenSSL::RSA in perl. Questo è il mio codiceFirma i dati usando Crypt :: OpenSSL :: RSA in perl

use Crypt::OpenSSL::RSA; 
open $privfh, '>:encoding(UTF-8)', 'private_key'; 

$rsa = Crypt::OpenSSL::RSA->generate_key(1024); 

$key_string=$rsa->get_private_key_string(); 
print $privfh $key_string; 

$rsa_priv = Crypt::OpenSSL::RSA->new_private_key($key_string); 

$rsa_pub = $rsa->get_public_key_string(); 

$plaintext="hello"; 
$signature = $rsa_priv->sign($plaintext); 
print "Signed correctly\n" if ($rsa->verify($plaintext, $signature)); 

Questo programma funziona correttamente e sono in grado di firmare correttamente i dati. Ma il problema è che devo firmare un sacco di dati in modo che io sto scrivendo key_string un file in modo che posso usare più e più volte, ma il problema è quando provo ad usare di nuovo usando seguente codice

use Crypt::OpenSSL::RSA; 
open FILE ,'<','private_key'; 

{ 
    local $/; 
    $keystring=<FILE>; 
} 
print "$keystring\n"; 
$rsa_priv = Crypt::OpenSSL::RSA->new_private_key($key_string); 

sta generando un errore e non sta generando $rsa_priv. L'errore fornito dal programma è RSA.xs:178: OpenSSL error: no start line at testperl.pl line 11, <FILE> line 1. Cosa devo fare in modo che sia in grado di firmare ancora e ancora dopo aver generato la chiave per una sola volta.

+0

Non è stato stampato nulla di nuovo usando 'use Data :: Dumper 'print Dumper $ keystring;'. È lo stesso della mia semplice dichiarazione di stampa in entrambi i codici. – shivams

+0

Usa sempre 'usa strict; usare avvertenze; ​​'. –

+0

Potrebbe trattarsi di un carattere corrotto all'inizio del file. Spazio extra o linea. –

risposta

1

Si sta leggendo il file in una variabile $keystring ma si inizializza la chiave privata utilizzando la variabile $key_string. Cambia $keystring a $key_string.

Perl offre use strict; per evitare questo tipo di problemi. Inoltre, se si utilizza use warnings;, perl avviserà anche l'accesso alle variabili unitializzate.