(这个问题最初是在 ServerFault 上发布的——我已经在那里删除了它并把它移到了这里。)
我有一台运行 PHP 5.3.5 的开发机器和一台运行 PHP 5.3.8 的生产机器。
以下代码在开发机器上运行:
<?php
$key = "-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0x+2RiQ+LCZNAUcl/Ecf1NrTr
lhjOiHaVC+w/y+UJevqVcDstD22OJGwT13B9T47OuQG9BmzcZQYLcShUMhVD/Owu
9+8PcK51EnBd0lym6+z/WixpnqfQonyKiqq5ytmYKUlUv39J8QQUI2geyvY9VpWS
wyNcFUs7wPl2zsLCPQIDAQAB
-----END PUBLIC KEY-----";
$data = "Hello, world!";
$key1 = openssl_get_publickey($key);
print_r ($key1);
echo "<p>";
$res = openssl_public_encrypt($data, $encrypted_data, $key1, OPENSSL_PKCS1_PADDING);
echo base64_encode($encrypted_data);
在我的开发机器上,此代码输出资源和编码字符串。我会在这里复制它,但当然它每次都会改变。在生产机器上,此代码会产生资源编号和以下 PHP 错误:
PHP Warning: openssl_public_encrypt(): Don't know how to get public key from this private key in C:\xxx\test.php on line 15
PHP Warning: openssl_public_encrypt(): key parameter is not a valid public key in C:\xxx\test.php on line 15
不幸的是,目前不能在生产机器上安装旧版本的 PHP,因为在其上运行的其他应用程序至少需要 5.3.8。
如果我升级到 5.4.x 会有帮助吗?
我确实知道 5.3.5 上的 OpenSSL 版本是 0.9.8,而 5.3.8 中的版本是 1.0.0。我想那里可能有问题。有没有办法解决这个问题?
我试图从 OpenSSL.org 站点和 PHP 错误跟踪器中找出尽可能多的信息,但我不知道我在寻找什么。
问候,
菲利普