2

私はこのコードを見ました:

<?php
class MyEncryption
{

    public $pubkey = '...public key here...';
    public $privkey = '...private key here...';

    public function encrypt($data)
    {
        if (openssl_public_encrypt($data, $encrypted, $this->pubkey))
            $data = base64_encode($encrypted);
        else
            throw new Exception('Unable to encrypt data. Perhaps it is bigger than the key size?');

        return $data;
    }

    public function decrypt($data)
    {
        if (openssl_private_decrypt(base64_decode($data), $decrypted, $this->privkey))
            $data = $decrypted;
        else
            $data = '';

        return $data;
    }
}


?>

public_key のサンプルは何ですか? $pubkey にはどのような公開鍵を配置する必要がありますか? base_64 でエンコードする必要がありますか? どうすれば生成できますか?

追加した:

$privKey = openssl_pkey_new();

そして、私が得たのは $privKey==false だけです

4

1 に答える 1

2

公開鍵は情報を暗号化できる「非秘密」鍵であるため、鍵は一緒に生成する必要があり、秘密鍵だけが復号化できます。これは公開鍵暗号の例です。

openssl_pkey_new が失敗した場合 (キー自体は返されず、実際のキーを取得するために使用できるリソースのみが返されます)、マニュアル ページのコメント セクションにある例と代替手段へのリンクを参照してください。

いいえ、キーは base64 でエンコードされるべきではありません。これは、メソッド内の暗号化されたデータに対してのみ行われます。これがクラスで行われる理由は、元の作成者が暗号化されたデータをある種の非バイナリセーフ環境を介して転送したかったためと考えられます。

于 2012-12-18T10:11:19.770 に答える