3

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

よろしく、

フィリップ

4

2 に答える 2

0

の間違ったパラメータを渡しましたopenssl_public_encrypt

openssl_public_encrypt($data, $encrypted_data, $key1, OPENSSL_PKCS1_PADDING)

の代わりに$key1リソース ID を使用します。使用できます$key$key1

openssl_public_encrypt($data, $encrypted_data, $key, OPENSSL_PKCS1_PADDING)

于 2013-11-14T06:47:40.767 に答える