首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >openssl_pkey_get_public返回false,但key确实存在

openssl_pkey_get_public返回false,但key确实存在
EN

Stack Overflow用户
提问于 2017-01-19 01:21:56
回答 2查看 2.9K关注 0票数 0

我正在使用一个使用openssl_pkey_get_public的库,但它返回false。似乎启用了openssl,并且密钥存在。下面是我正在使用的库中的几行代码,btw,我正在调试它,但不能修改,因为它不是我的代码库:

代码语言:javascript
运行
复制
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())
            );
        }
.
.
.

我插入了以下调试代码:

代码语言:javascript
运行
复制
$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的内容:

代码语言:javascript
运行
复制
echo file_get_content($keyPath);

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQChY1gtF0Oeku62+4HCisIswcDu9fjZV7fImTlqQej/UsmsJH7jz5EF/ZXCWTKV/bgOwzV2oeHomukITqiR14D01W3mVcpTBAp5AP4JN25am57xdc6Nxd8Lo/NsCKKqQ4/uBmpYBVZm8Ye/hu3ixM6y/xbCGnw/ca4z0DKDa94z1XrRc6FrV1mXx5lItQEo/v8wVKX9NJVAANYZ/jJEk7jGTB9WkSTNR5l/tNBBF3MFuBigjSuaxUsnKT2IwOV5g2ewN4TzXARi2/BI7rweNsUFCWRbkUa7VJc3XOVZbS50TzUpAIqHI9Q8enBs95A1JvSTDvlT3efEHrM2T7KP7QOz ubuntu@ubuntu-xenial

我之前使用以下命令创建了密钥:

代码语言:javascript
运行
复制
ssh-keygen -f storage/id_rsa -t rsa -N ''

一些附加信息,如果有帮助的话:

代码语言:javascript
运行
复制
$ 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

有没有可能发生这种情况的原因?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-21 23:21:33

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

示例代码:http://phpseclib.sourceforge.net/rsa/examples.html#encrypt,enc

票数 3
EN

Stack Overflow用户

发布于 2018-09-19 17:56:39

代码语言:javascript
运行
复制
$pub_key = openssl_pkey_get_public("-----BEGIN PUBLIC KEY-----\n".file_get_contents('public_key.pem')."\n-----END PUBLIC KEY-----"); 
var_dump($pub_key); 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41725687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档