Perl Crypt::OpenSSL::RSA 加载私钥时失败,并出现令人困惑的错误消息

问题描述 投票:0回答:1

我正在尝试使用 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”密钥字符串的格式是什么建议我应该使用?

perl openssl
1个回答
0
投票

您的 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
© www.soinside.com 2019 - 2024. All rights reserved.