我正在尝试使用 Crypt::OpenSSL::RSA 使用公钥加密文件,然后使用相应的私钥(当前我在提示时输入)对其进行解密。我的加密程序运行良好;但当我尝试解密时,我遇到了一个令人困惑的错误。有人可以帮我诊断一下并找出我做错了什么吗?该文档有点粗略,我在网上找到的唯一示例以不同的方式完全失败了。
这是测试程序(“pub_decrypt”)
#! /usr/bin/perl
use strict;
use warnings;
use 5.026;
use Crypt::OpenSSL::RSA;
my $private_key_file = 'private.pem';
my $input_file = shift or exit;
die "Input file '$input_file' not found\n" unless -e $input_file;
print "Enter passphrase for '$private_key_file': ";
my $passphrase = <>;
chomp $passphrase;
exit unless $passphrase;
my $priv_key = Crypt::OpenSSL::RSA->new_private_key( $private_key_file, $passphrase )
or die "Failed to get private key";
my $decrypted = $priv_key->decrypt( $input_file )
or die "Decryption failed";
print "Decrypted text:\n$decrypted\n";
当我运行它时,会发生这种情况:
./pub_decrypt encrypted_text
Enter passphrase for 'private.pem': blahblah
Usage: Crypt::OpenSSL::RSA::new_private_key(proto, key_string_SV) at ./pub_decrypt line 18, <> line 1.
我喜欢库告诉你调用它时做错了什么,但在这种情况下,建议的用法与模块文档不同。什么是“proto”,“_SV”密钥字符串的格式是什么建议我应该使用?
您的 Crypt::OpenSSL::RSA 版本不接受密码。
0.33:(此时 CPAN 上的最新)
SV*
new_private_key(proto, key_string_SV, passphase_SV=&PL_sv_undef)
SV* proto;
SV* key_string_SV;
SV* passphase_SV;
CODE:
RETVAL = make_rsa_obj(
proto, _load_rsa_key(key_string_SV, PEM_read_bio_RSAPrivateKey, passphase_SV));
OUTPUT:
RETVAL
0.28:(此时 CPAN 上的第二个最新消息)
SV*
new_private_key(proto, key_string_SV)
SV* proto;
SV* key_string_SV;
CODE:
RETVAL = make_rsa_obj(
proto, _load_rsa_key(key_string_SV, PEM_read_bio_RSAPrivateKey));
OUTPUT:
RETVAL