【问题标题】:How to generate passphrase protected RSA keys in Perl如何在 Perl 中生成受密码保护的 RSA 密钥
【发布时间】:2023-11-13 04:26:01
【问题描述】:

我正在尝试在 Perl 中生成带有密码保护的公钥和私钥,但我没有发现任何有用的东西。

到目前为止,我发现这个链接http://search.cpan.org/~vipul/Crypt-RSA-1.57/lib/Crypt/RSA.pm 似乎很有希望。但是,我可以在没有任何密码的情况下解密我的消息,尽管我已经使用密码创建了它们。

另一个链接是这个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;

【问题讨论】:

  • 请添加您认为能够“在没有密码短语的情况下解密加密内容”的实际 Perl 代码的 sn-p。尽可能具体
  • 嗨,迈克,我添加了一个 sn-p 来证明我的观点。谢谢!

标签: perl rsa private-key public-key passphrase


【解决方案1】:

RSA 的密码仅用于保存或读取磁盘上的密钥。在您的操作中,您从未将私钥保存到磁盘,因此它在内存中已经未加密。

从私钥文档中,您可以看到如何将其隐藏并保存到磁盘(您拥有的 $master_private 对象已经是该类型的对象)

https://metacpan.org/pod/Crypt::RSA::Key::Private

【讨论】:

    最近更新 更多