12

PHPのopenssl_public_encrypt()を使用して、RSAを使用してデータを暗号化しています。ただし、特定のサイズを超えるデータは暗号化されません。

任意の長さのデータを暗号化するにはどうすればよいですか?

4

3 に答える 3

6

PKCS1 パディングを使用する RSA では、キーの長さ (バイト単位) - 11 の文字列のみを実行できます。これは、OpenSSL または PHP の制限ではなく、RSA の制限です。

openssl_* 関数セットを使用してより長い文字列を実行する場合は、openssl_sealopenssl_openを使用します。openssl_seal はランダムな文字列を生成し、RSA で暗号化してから、前述のランダムな文字列をキーとして使用して、実際に暗号化しようとしているデータを RC4 で暗号化します。

純粋な PHP RSA 実装である phpseclibは、異なるアプローチを採用しています。RSA キーよりも大きな文字列を暗号化することを主張する場合、その文字列を RSA が処理できる最大サイズのチャンクに分割し、結果を連結します。

phpseclib OpenSSL Interoperabilityページでは、phpseclib を使用して openssl_seal / openssl_open と同じことを行う方法について説明しています。

それが役立つことを願っています!

于 2013-06-14T16:10:39.690 に答える
4

php.net ページには、この問題に対する優れたヒントがあります (いつものように) http://www.php.net/manual/en/function.openssl-public-encrypt.php#95307

于 2011-06-08T11:33:03.990 に答える