openssl_pkey_get_private 一个键返回 false

openssl_pkey_get_private returning false for one key

我有两把钥匙。对于一个它工作得很好并且给出响应 resource(368) of type (OpenSSL key) 但对于另一个键它只是返回一个 false.

在这两种情况下,我都没有提供路径,而是提供了字符串本身。

其工作的关键是这样的:

-----BEGIN RSA PRIVATE KEY-----
MIIJKAIBAAKCAgEA74waKCtYqw7U7gE93BCn0CPmulFd1K8AaJqqBjOLe//okAuA
<...........................................................>
MGgCk1mrd65nf6JWsxb3RVcQ7jYxyFs3Pr4LFcgn1K0aTLnlwarBFjt+J3Y=
-----END RSA PRIVATE KEY-----

它不起作用的关键是这样的:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,14CA8(removing some values)2B6244

LwBvVX6TbdS9XYg0xywoLbhiaYK5UE6SQnATXJ8fXfJit+F4XcOfmWyQn+UsJRnM
<...........................................................>
s8M/Fe7YpkORsGSzQ6f5YslfmbmCsdCFDiBnTaIe45NP8IBULWY/vm45bYFteKUs
-----END RSA PRIVATE KEY-----

PS : 为了安全起见,我隐藏了大部分密钥。

键值是否也影响openssl抛出错误?

代码:

$pkey = openssl_pkey_get_private(my_private_key_in_string_form);

编辑:

我在研究中发现,第二个密钥是加密形式,而第一个密钥是原始形式。 但是我还没有找到如何将这个加密的私钥从一个已经创建的密钥转换成它的原始形式。

查看密钥,有效的密钥不受密码保护,你说失败的密钥受密码保护,对 openssl_pkey_get_private() 的调用也没有密码的第二个可选参数。我指的是 https://www.php.net/manual/en/function.openssl-pkey-get-private.php

中的文档

因此,如果您的私钥已加密,则必须指定密码,以便 openssl_pkey_get_private() API

可以正确读取密钥