如果我运行命令:
openssl pkcs8 -inform DER -in file.key
然后我得到这个输出:
-----BEGIN PRIVATE KEY-----
MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJymFcYButtSdq6a
. . .
ROHl3KioElE/sRvPEHxJp5Bqlr2UmWSs4oMcDBVLfY609YKZTeKw6NuqH4xzd81F
7Rj3Gr6eyKeC
-----END PRIVATE KEY-----
我需要在我的 PERL 脚本上生成相同的输出,以便将其传递给:
Crypt::OpenSSL::RSA->new_private_key($key_string);
并签署我的数据。
所以我问:这个命令在内部做什么?
openssl pkcs8 -inform DER -in file.key
所以我可以把这个过程翻译成perl。
这是我到目前为止所拥有的:
我加载了 pkcs8 的 ASN.1 语法,现在我可以通过引用获取数据块:
$pkcs8 = Convert::ASN1->new(encoding => 'DER');
$pkcs8->prepare(q<
--PrivateKey
EncryptedPrivateKeyInfo ::= SEQUENCE {
encryptionAlgorithm EncryptionAlgorithmIdentifier,
encryptedData EncryptedData
}
EncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
EncryptedData ::= OCTET STRING
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL }
>);
加载 .key 文件并进行转储的结果是:
$VAR1 = {
'encryptionAlgorithm' => {
binary data 'parameters' => binary data¸
'algorithm' => '1.2.840.113549.1.5.13'
},
'encryptedData' => ' . . . . binary data . . . . . '
};
我相信encryptedData是根据 OID 1.2.840.113549.1.5.13使用 pkcs5 编码的
任何建议表示赞赏。