phpseclib loadKey 适用于 mac,不适用于 CentOS
phpseclib loadKey works on mac, not on CentOS
我正在尝试在 phpseclib(稳定版本 0.3.10)中加载硬编码(为了测试)RSA public 密钥。当 运行 在我的本地 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();
然而,当我将它推送到 AWS 实例 运行ning CentOS 时,loadKey
调用 returns 错误。我没有看到任何其他错误通知告诉我出了什么问题。任何想法可能是什么问题?某些依赖项未安装?
所以通常私钥中嵌入了 public 密钥。所以 $rsa->getKey()
returns 私钥和 $rsa->getPublicKey()
returns 嵌入在私钥中的 public 密钥。
在此示例中,您正在加载 public 密钥并尝试获取 public 密钥。旧版本的 phpseclib 不会查看 - 之间的字符串,因此它会假设它是没有 public 密钥组件的私钥(因此 $rsa->getPublicKey()
返回 false)。
此行为在较新版本的 phpseclib 中有所不同。如果它看到“BEGIN PUBLIC KEY”,它会假定它是一个 public 键,因此 $rsa->getPublicKey()
将起作用。
所以我的猜测:您是 运行 CentOS AWS 安装上的 phpseclib 的过时版本。
问题是由于在 CentOS 服务器上启用了 mbstring 函数重载,而不是在本地启用,这破坏了一些二进制数据比较。在执行加密时,我需要找到解决方法。
我正在尝试在 phpseclib(稳定版本 0.3.10)中加载硬编码(为了测试)RSA public 密钥。当 运行 在我的本地 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();
然而,当我将它推送到 AWS 实例 运行ning CentOS 时,loadKey
调用 returns 错误。我没有看到任何其他错误通知告诉我出了什么问题。任何想法可能是什么问题?某些依赖项未安装?
所以通常私钥中嵌入了 public 密钥。所以 $rsa->getKey()
returns 私钥和 $rsa->getPublicKey()
returns 嵌入在私钥中的 public 密钥。
在此示例中,您正在加载 public 密钥并尝试获取 public 密钥。旧版本的 phpseclib 不会查看 - 之间的字符串,因此它会假设它是没有 public 密钥组件的私钥(因此 $rsa->getPublicKey()
返回 false)。
此行为在较新版本的 phpseclib 中有所不同。如果它看到“BEGIN PUBLIC KEY”,它会假定它是一个 public 键,因此 $rsa->getPublicKey()
将起作用。
所以我的猜测:您是 运行 CentOS AWS 安装上的 phpseclib 的过时版本。
问题是由于在 CentOS 服务器上启用了 mbstring 函数重载,而不是在本地启用,这破坏了一些二进制数据比较。在执行加密时,我需要找到解决方法。