如何在 Perl 中生成密码保护的 RSA 密钥
How to generate passphrase protected RSA keys in Perl
我正在尝试在 Perl 中生成一个 public 和带有密码保护的私钥,但我没有发现任何有用的东西。
直到现在我发现这个 link http://search.cpan.org/~vipul/Crypt-RSA-1.57/lib/Crypt/RSA.pm 看起来很有前途。但是,我可以在没有任何密码的情况下解密我的消息,尽管我已经使用密码创建了它们。
另一个 link 是这个 http://www.perlmonks.org/?node_id=903458 但是当我创建我的密钥时(为了将它们存储在数据库中)我仍然可以在不使用密码的情况下解密。
总而言之,我需要一个库,它允许我使用私钥加密文本,同时使用两者的密码。
感谢您的帮助!
PD:请不要使用 PGP 加密。
更新
这里有一段代码没有按预期工作:
use strict;
use warnings;
use Data::Dumper;
use 5.010;
use Crypt::RSA;
my $rsa = new Crypt::RSA;
my ($master_public, $master_private) = $rsa->keygen(
Identity => "Someone",
Size => 1024,
Password => "this is a password or passphare",
) or die $rsa->errstr();
my $cyphertext = $rsa->encrypt (
Message => "My Message that I want to encrypt",
Key => $master_public,
Armour => 1,
) or die $rsa->errstr();
my $text = $rsa->decrypt (
Cyphertext => $cyphertext,
Key => $master_private,
Armour => 1,
# Here I expect to add the user's passphrase
) or die $rsa->errstr();
say $text;
RSA 的密码仅用于在磁盘上保存或读取密钥。在您的操作中,您没有将私钥保存到磁盘,因此它在内存中已经未加密。
从私钥文档中可以看到如何隐藏和保存到光盘(您拥有的$master_private对象已经是该类型的对象)
我正在尝试在 Perl 中生成一个 public 和带有密码保护的私钥,但我没有发现任何有用的东西。
直到现在我发现这个 link http://search.cpan.org/~vipul/Crypt-RSA-1.57/lib/Crypt/RSA.pm 看起来很有前途。但是,我可以在没有任何密码的情况下解密我的消息,尽管我已经使用密码创建了它们。
另一个 link 是这个 http://www.perlmonks.org/?node_id=903458 但是当我创建我的密钥时(为了将它们存储在数据库中)我仍然可以在不使用密码的情况下解密。
总而言之,我需要一个库,它允许我使用私钥加密文本,同时使用两者的密码。
感谢您的帮助!
PD:请不要使用 PGP 加密。
更新
这里有一段代码没有按预期工作:
use strict;
use warnings;
use Data::Dumper;
use 5.010;
use Crypt::RSA;
my $rsa = new Crypt::RSA;
my ($master_public, $master_private) = $rsa->keygen(
Identity => "Someone",
Size => 1024,
Password => "this is a password or passphare",
) or die $rsa->errstr();
my $cyphertext = $rsa->encrypt (
Message => "My Message that I want to encrypt",
Key => $master_public,
Armour => 1,
) or die $rsa->errstr();
my $text = $rsa->decrypt (
Cyphertext => $cyphertext,
Key => $master_private,
Armour => 1,
# Here I expect to add the user's passphrase
) or die $rsa->errstr();
say $text;
RSA 的密码仅用于在磁盘上保存或读取密钥。在您的操作中,您没有将私钥保存到磁盘,因此它在内存中已经未加密。
从私钥文档中可以看到如何隐藏和保存到光盘(您拥有的$master_private对象已经是该类型的对象)