我正在尝试使用 public 键解密RSA加密邮件。
使用Crypt::OpenSSL::RSA
,我可以使用任一密钥加密,但我只能用私钥解密。试图用公钥解密:
use Crypt::OpenSSL::RSA;
use MIME::Base64;
use File::Slurp;
my $public_key = 'rsa.pub.pem';
#my $private_key = 'rsa.priv.pem';
my $rsa_public = Crypt::OpenSSL::RSA->new_public_key(scalar read_file $public_key);
#my $rsa_private = Crypt::OpenSSL::RSA->new_private_key(scalar read_file $private_key);
my $ciphertext_b64 = 'cqyPNNfqYaUeIsM1yAz7IsQ760Bkd4IPaatHnMQtQAMKtYTEUqFHwnSZ4hg2
pkoJM1N5Ejlv6Eqkk/ZaMWl1nTDOxRDj0V6PARQPqz3QF1UGWkSMxMt/DlSn
AtrRXgjvrILbMX5BsV2S5mHcLoCeNVb+jdnX0x0Uu/AAFPsByPRrt1yM1ORo
KcP+0ENvcvJ8yGOxJ2jOEmTFkQM5kjNDIFmLUlt6qODdTGWvYWR2CDduLO4m
qiyAt4yK5K3vwMybAG5ceRGb/kmMSW10EnvbryIdDGVGS8Zvodu3xqtbM1Yo
tdtZRDkcUcOYlUi3VRvSTimatVkJPG8QDlZofrBA0w==';
my $ciphertext = decode_base64($ciphertext_b64);
print $rsa_public->decrypt($ciphertext);
#print $rsa_private->decrypt($ciphertext);
结果:Public keys cannot decrypt at test.pl line 19.
顺便说一下,Ruby似乎没有问题用任何一个密钥加密和解密(这就是我目前处于这种情况的原因)。
答案 0 :(得分:4)
您是否意识到Crypt::OpenSSL::RSA中有public_decrypt
方法?
答案 1 :(得分:1)
#!/usr/bin/env perl
use strict;
use warnings;
use MIME::Base64;
use Data::Dumper;
use File::Slurp qw(read_file);
use Crypt::OpenSSL::RSA;
use Convert::PEM;
my $rsa = Crypt::OpenSSL::RSA->generate_key(2048);
my $keyFile = "pri1.pem";
my $pubfile = "pub.pem";
my $string_Key = read_file($keyFile);
my $string_pub = read_file($pubfile);
my $rsa_pub = Crypt::OpenSSL::RSA->new_public_key($string_pub);
my $rsa_priv = Crypt::OpenSSL::RSA->new_private_key($string_Key);
$rsa_pub->use_pkcs1_padding();
my $plaintext = "Hello world";
my $ciphertext = $rsa_pub->encrypt($plaintext);
print encode_base64($ciphertext);
################################################
################################################################3
$rsa_priv->use_pkcs1_padding();
my $decrypttext = $rsa_priv->decrypt($ciphertext);
print "\ndecrypttext:\n", $decrypttext;
答案 2 :(得分:0)
您应该使用私钥解密或使用公钥验证签名 使用适当的方法。从您的问题不清楚您是否进行加密或签名。
如果您尝试“解密RSA加密消息”,那么您还不清楚自己想要做什么以及您正在使用的库实际上在做什么。用于加密和数字签名的填充对于RSA是不同的。因此,如果您调用错误的方法,那么在最好的情况下,您会收到错误消息,在最坏的情况下,您最终会得到一个不安全的方案。