在 perl 中使用 Crypt::OpenSSL::RSA 对数据进行签名



我正在尝试使用 perl 中的Crypt::OpenSSL::RSA对我的数据进行签名。这是我的代码

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 correctlyn" if ($rsa->verify($plaintext, $signature));

该程序运行良好,我能够正确签署数据。但问题是我必须签署大量数据,所以我将key_string写入文件,以便我可以一次又一次地使用它,但问题是当我尝试使用以下代码再次使用它时

use Crypt::OpenSSL::RSA;
open FILE ,'<','private_key';
{
  local $/;
  $keystring=<FILE>;
 }
 print "$keystringn";
 $rsa_priv = Crypt::OpenSSL::RSA->new_private_key($key_string);

它抛出错误并且没有生成$rsa_priv.程序给出的错误是 RSA.xs:178: OpenSSL error: no start line at testperl.pl line 11, <FILE> line 1 .我应该怎么做,以便我能够在仅生成一次密钥后一次又一次地签名。

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

Perl 提供了use strict;来避免这类问题。另外,如果你使用 use warnings; ,perl 也会警告你访问单位化变量。

最新更新