使用Perl中的Crypt :: OpenSSL :: RSA签名数据

shi*_*ams 6 encryption perl sign

我正在尝试使用我的数据签名 Crypt::OpenSSL::RSA 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));
Run Code Online (Sandbox Code Playgroud)

这个程序运行正常,我能够正确签名数据.但问题是我必须签署大量数据,所以我写的key_string一个文件,以便我可以一次又一次地使用它,但问题是当我尝试再次使用它使用以下代码

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

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

它抛出错误而不是生成$rsa_priv.该程序给出的错误是 RSA.xs:178: OpenSSL error: no start line at testperl.pl line 11, <FILE> line 1.我该怎么做才能在一次生成密钥后一次又一次地签名.

neu*_*aus 1

您正在将文件读入变量$keystring,但使用该变量初始化私钥$key_string。改成。$keystring$key_string

Perluse strict;可以避免此类问题。另外,如果您使用use warnings;,perl 还会警告您有关访问未初始化变量的信息。