2014-12-30 7 views
6

Ich versuche, meine Daten mit Crypt::OpenSSL::RSA in Perl zu unterzeichnen. Das ist mein CodeSigning Daten mit 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)); 

Dieses Programm läuft gut und ich bin in der Lage, Daten korrekt zu signieren. Aber das Problem ist, dass ich eine Menge von Daten zu unterschreiben, damit ich key_string in eine Datei schreibe, so dass ich es wieder verwenden kann und wieder, aber das Problem ist, wenn ich versuche, es zu benutzen, wieder folgenden Code

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

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

es ist Fehler werfen und nicht $rsa_priv generieren. Der vom Programm angegebene Fehler ist RSA.xs:178: OpenSSL error: no start line at testperl.pl line 11, <FILE> line 1. Was soll ich tun, damit ich wieder und wieder signieren kann, nachdem ich den Schlüssel nur einmal generiert habe?

+0

Es gibt nichts neues aufgedruckt mit 'verwenden Data :: Dumper 'print Dumper $ keystring;'. Es ist dasselbe wie meine einfache Druckanweisung in beiden Codes. – shivams

+0

Verwenden Sie immer 'use strict; Verwenden Sie Warnungen; '. –

+0

Es könnte sein, dass am Anfang der Datei ein beschädigtes Zeichen vorhanden ist. Extra Platz oder Linie. –

Antwort

1

Sie lesen die Datei in eine Variable $keystring, initialisieren aber den privaten Schlüssel mit der Variablen $key_string. Ändern Sie $keystring zu $key_string.

Perl bietet use strict;, um diese Art von Problemen zu vermeiden. Wenn Sie use warnings; verwenden, warnt Sie Perl auch vor dem Zugriff auf unitialisierte Variablen.

Verwandte Themen