(この質問は元々 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 バグ トラッカーからできる限り多くのことを見つけようとしましたが、何を探しているのかわかりません。
よろしく、
フィリップ