我正在尝试使用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 correctly\n" if ($rsa->verify($plaintext, $signature));
此程序运行正常,我能够正确签名数据。但问题是我必须签署大量数据,所以我将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);
抛出错误而不生成$rsa_priv
。该程序给出的错误是
RSA.xs:178: OpenSSL error: no start line at testperl.pl line 11, <FILE> line 1
。
我该怎么办才能在一次生成密钥后一次又一次地签名。
答案 0 :(得分:1)
您正在将文件读入变量$keystring
,但使用变量$key_string
初始化私钥。将$keystring
更改为$key_string
。
Perl提供use strict;
来避免这些问题。
此外,如果您使用use warnings;
,perl还会警告您访问单位化变量。