3

PHP で openssl_seal 関数を使用して暗号化するための公開鍵の読み込みに問題があります...

openSSL コマンド ライン ツールを使用して公開鍵と秘密鍵を作成しました。

openssl genrsa -des3 -out private.pem 1024

openssl rsa -in private.pem -out public.pem -outform PEM -pubout

ただし、PHP コードで実行すると、次のエラーが発生します。

openssl_seal() [function.openssl-seal]: Don't know how to get public key from this private key
openssl_seal() [function.openssl-seal]: not a public key (1th member of pubkeys)

openssl verify public.pem を使用して公開鍵を検証すると、次のようになります。

unable to load certificate
1876:error:0906D06C:PEM routines:PEM_read_bio:no start line:.\crypto\pem\pem_lib
.c:648:Expecting: TRUSTED CERTIFICATE

なぜこれが起こっているのか知っている人はいますか?

PHP コード:

public function encrypt($valueToEncrypt, $publicKeyFile)
{
    $pk = file_get_contents($publicKeyFile);
    $publicKey = openssl_pkey_get_public($pk);

    $encrypted = '';
    $a_envelope = array();
    $a_key = array($publicKey);
    if (openssl_seal($valueToEncrypt, $encrypted, $a_envelope, $a_key) === FALSE)
            {
                while ($msg = openssl_error_string())
                    echo $msg . "<br />\n";
                die('Failed to encrypt data!');
            }
            openssl_free_key($publicKey);
....
4

2 に答える 2

1

同じ問題が発生している場合は、Windowsへのxamppのインストールに関連する問題です。phpの新規インストールでコマンドラインを実行すると正常に機能しました。

于 2012-05-15T12:26:46.210 に答える
0

StuffandBlah の回答に加えて、実際には、Windows 上の XAMPP の Apache と PHP の異なる OpenSSL バージョンに関連しています。問題を解決する方法 (DLL のコピー)の投稿を次に示します。

于 2012-07-11T12:49:51.210 に答える