Php openssl_pkey_get_public返回false,但密钥确实存在

Php openssl_pkey_get_public返回false,但密钥确实存在,php,rsa,php-openssl,Php,Rsa,Php Openssl,我使用的库使用openssl_pkey_get_public,但返回false。似乎已启用openssl,并且密钥存在。下面是我正在使用的库中的几行代码,顺便说一句,我正在调试它,但无法修改,因为它不是我的代码库: protected function decrypt($encryptedData) { $publicKey = openssl_pkey_get_public($this->publicKey->getKeyPath()); $

我使用的库使用openssl_pkey_get_public,但返回false。似乎已启用openssl,并且密钥存在。下面是我正在使用的库中的几行代码,顺便说一句,我正在调试它,但无法修改,因为它不是我的代码库:

protected function decrypt($encryptedData)
    {
        $publicKey = openssl_pkey_get_public($this->publicKey->getKeyPath());
        $publicKeyDetails = @openssl_pkey_get_details($publicKey);
        if ($publicKeyDetails === null) {
            throw new \LogicException(
                sprintf('Could not get details of public key: %s', $this->publicKey->getKeyPath())
            );
        }
.
.
.
我已插入以下调试代码:

$keyPath = $this->publicKey->getKeyPath(); // returns file:///var/www/sso/website/storage/id_rsa.pub
var_dump(file_exists($keyPath)); // outputs true
var_dump(openssl_pkey_get_public($keyPath)); // returns false
下面显示了$keyPath的内容:

echo file_get_content($keyPath);

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQChY1gtF0Oeku62+4HCisIswcDu9fjZV7fImTlqQej/UsmsJH7jz5EF/ZXCWTKV/bgOwzV2oeHomukITqiR14D01W3mVcpTBAp5AP4JN25am57xdc6Nxd8Lo/NsCKKqQ4/uBmpYBVZm8Ye/hu3ixM6y/xbCGnw/ca4z0DKDa94z1XrRc6FrV1mXx5lItQEo/v8wVKX9NJVAANYZ/jJEk7jGTB9WkSTNR5l/tNBBF3MFuBigjSuaxUsnKT2IwOV5g2ewN4TzXARi2/BI7rweNsUFCWRbkUa7VJc3XOVZbS50TzUpAIqHI9Q8enBs95A1JvSTDvlT3efEHrM2T7KP7QOz ubuntu@ubuntu-xenial
我以前使用以下命令创建了关键点:

ssh-keygen -f storage/id_rsa -t rsa -N ''
如果有帮助,请提供一些其他信息:

$ php -i | grep openssl
openssl
Openssl default config => /usr/lib/ssl/openssl.cnf
openssl.cafile => no value => no value
openssl.capath => no value => no value

$ php -m | grep openssl
openssl

发生这种情况有什么原因吗?

您使用的是SSH格式的公钥。OpenSSL不支持这种格式。但是你知道什么支持这种格式吗?phpseclib。它将自动检测格式,一旦加载,将允许您执行任何需要执行的RSA操作。请注意,phpseclib希望实际的密钥被传递给它——不是文件系统上的密钥路径,而是密钥本身


示例代码:

您使用的是SSH格式的公钥。OpenSSL不支持这种格式。但是你知道什么支持这种格式吗?phpseclib。它将自动检测格式,一旦加载,将允许您执行任何需要执行的RSA操作。请注意,phpseclib希望实际的密钥被传递给它——不是文件系统上的密钥路径,而是密钥本身


示例代码:

您使用的是SSH格式的公钥。OpenSSL不支持这种格式。但是你知道什么支持这种格式吗?phpseclib。它将自动检测格式,一旦加载,将允许您执行任何需要执行的RSA操作。请注意,phpseclib希望实际的密钥被传递给它——不是文件系统上的密钥路径,而是密钥本身。示例代码:Hi。谢谢就这样。我用以下代码创建kay对:
$openssl-genpkey-algorithm-RSA-out storage/private.pem-pkeyopt RSA\u keygen\u bits:2048$openssl-RSA-pubout-in storage/private.pem-out storage/public.pem
如果您愿意,请随意创建一个关于这个问题的答案,我会将它标记为正确答案,您值得称赞;)您正在使用SSH格式的公钥。OpenSSL不支持这种格式。但是你知道什么支持这种格式吗?phpseclib。它将自动检测格式,一旦加载,将允许您执行任何需要执行的RSA操作。请注意,phpseclib希望实际的密钥被传递给它——不是文件系统上的密钥路径,而是密钥本身。示例代码:Hi。谢谢就这样。我用以下代码创建kay对:
$openssl-genpkey-algorithm-RSA-out storage/private.pem-pkeyopt RSA\u keygen\u bits:2048$openssl-RSA-pubout-in storage/private.pem-out storage/public.pem
如果您愿意,请随意创建一个关于这个问题的答案,我会将它标记为正确答案,您值得称赞;)虽然这可以回答这个问题,但如果它解释了它是如何做到这一点的,它将非常有用。虽然这可以回答这个问题,但如果它解释了它是如何做到这一点的,它将非常有用。
$pub_key = openssl_pkey_get_public("-----BEGIN PUBLIC KEY-----\n".file_get_contents('public_key.pem')."\n-----END PUBLIC KEY-----"); 
var_dump($pub_key);