phpseclib loadKey适用于mac,而不适用于CentOS

时间:2015-05-27 13:56:41

标签: php centos rsa phpseclib

我正在尝试在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。我没有看到任何其他错误通知告诉我出了什么问题。任何想法可能是什么问题?有些依赖没有安装?

2 个答案:

答案 0 :(得分:1)

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

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

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

所以我的猜测:你在CentOS AWS安装上运行了一个过时版本的phpseclib。

答案 1 :(得分:1)

问题在于在CentOS服务器上启用了mbstring函数重载,但在本地服务器上没有启用,这打破了一些二进制数据比较。在执行加密时,我需要找到解决方法。