我试图在phpseclib(稳定版本0.3.10)中加载硬编码(出于测试目的)的RSA公钥。在Mac上本地运行时,此代码可以完美地正常工作,并吐出我输入的密钥:

CONST PUBLIC_KEY = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYwTO/CJJQ8vbwTRQRWmOS0Pbz
tFCks4RhmPxYANSQV5V9Qy+QSupewn2WAb7zV04r4RqtwxB7stDMbK+uPY+GYR5M
moQuT0YStJ6TXJjiF8i1Y+DBGLnTXOD36y93V8DpuFWMxMYtROskE+Mx1W70+VTZ
EM6k+jvIfzRJoVDqswIDAQAB
-----END PUBLIC KEY-----';

$rsa = new \Crypt_RSA();
$rsa->loadKey(self::PUBLIC_KEY);
echo $rsa->getPublicKey();


但是,当我将其推送到运行CentOS的AWS实例时,loadKey调用将返回false。我没有看到任何其他错误通知来告诉我出了什么问题。任何想法可能是什么问题?某些依赖项没有安装?

最佳答案

因此,通常,私钥中嵌入了公钥。因此,$rsa->getKey()返回私钥,而$rsa->getPublicKey()返回嵌入在私钥内的公钥。

在此示例中,您正在加载公共密钥并尝试获取公共密钥。较早版本的phpseclib不会查看-之间的字符串,因此会假定它是没有公钥组件的私钥(因此$rsa->getPublicKey()返回false)。

在新版本的PHP中,此行为是不同的。如果看到“ BEGIN PUBLIC KEY”,则假定它是一个公钥,因此$rsa->getPublicKey()将起作用。

所以我的猜测是:您正在CentOS AWS安装上运行phpseclib的过时版本。

关于php - phpseclib loadKey在Mac上有效,而不在CentOS上有效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30484674/

10-13 08:40