我需要找到一种将RSA公钥传输到服务器的网络通信程序的方法。我已经进行了一些研究,似乎最简单的方法是将公共密钥(存储为某种哈希引用)转换为JSON进行传输。但是,在我的测试代码中,我无法获取转换为JSON的密钥。这是我的测试程序:
use strict;
use warnings;
use Crypt::RSA;
use JSON;
my %hash = ( name => "bob",
age => 123,
hates=> "Perl"
);
my $hash_ref = \%hash;
my $hash_as_json = to_json($hash_ref);
print $hash_as_json, "\n"; # Works fine for a normal hash
my $rsa = new Crypt::RSA;
my ($public, $private) = $rsa->keygen (
Identity => 'client',
Size => 512,
Password => 'password',
Verbosity => 1,
) or die $rsa->errstr();
my $key_hash_as_json = to_json($public, {allow_blessed => 1, convert_blessed => 1});
print $key_hash_as_json, "\n";
在找到该行之前,{allow_blessed => 1, convert_blessed => 1}
我收到一条错误消息,提示
遇到对象'Crypt :: RSA :: Key :: Public = HASH(0x3117128)',但是在/ home / alex / perl5 / lib / perl5 / JSON.pm第154行。
这是什么意思,为什么那条线会解决?
添加代码后,它仅null
在我尝试打印JSON时给出。为什么会发生这种情况,我该如何解决?
另外,有没有更好的方法来做我在这里尝试的事情?
将RSA公钥表示为文本的最常见方式是PEM编码。不幸的是,Crypt::RSA
它没有提供任何转换为这种格式或其他任何标准格式的方法。不要使用它!
相反,建议您使用Crypt::OpenSSL::RSA
。使用此模块生成私钥并打印其公共形式很简单:
use Crypt::OpenSSL::RSA;
my $key = Crypt::OpenSSL::RSA->generate_key(512);
print $key->get_public_key_string;
这将输出如下的PEM编码:
-----BEGIN RSA PUBLIC KEY-----
MEgCQQDd/5F9Rc5vsNuKBrd4gfI4BDgre/sTBKu3yXpk+8NjByKpClsi3IQEGYeG
wmv/q/1ZjflFby1MPxMhXZo/82CbAgMBAAE=
-----END RSA PUBLIC KEY-----
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句