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

时间:2014-12-30 06:51:57

标签: perl encryption sign

我正在尝试使用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。 我该怎么办才能在一次生成密钥后一次又一次地签名。

1 个答案:

答案 0 :(得分:1)

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

Perl提供use strict;来避免这些问题。 此外,如果您使用use warnings;,perl还会警告您访问单位化变量。