2017-01-18 434 views
0

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

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 [email protected] 

我以前使用下面的命令创建的关键3210

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 

是否有任何理由,这可能发生?

+1

您正在使用SSH格式的公钥。 OpenSSL不支持这种格式。但是你知道什么支持这种格式? phpseclib。它会自动检测格式,一旦加载,就可以让你做任何你需要做的RSA操作。请注意,phpseclib希望将实际密钥传递给它 - 不是文件系统上的密钥路径,而是密钥本身。示例代码:http://phpseclib.sourceforge.net/rsa/examples.html#encrypt,enc2 – neubert

+0

嗨。谢谢!就是这样。我使用以下代码创建了kay对: '$ openssl genpkey -algorithm RSA -out storage/private.pem -pkeyopt rsa_keygen_bits:2048 $ openssl rsa -pubout -in storage/private.pem -out storage/public.pem “如果你愿意,可以随意创建一个关于这个问题的答案,我会将它标记为正确的答案,你应该得到你的荣誉;) – Martyn

回答

1

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

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

相关问题