質問: 作成したファイルを公開鍵暗号方式で暗号化し、渡してほしいとのことだったのでopensslにて暗号化する仕組みを調べていたのですが、どうやら通常の暗号化では鍵より容量の大きいサイズのファイルを暗号化できないようで、困っておりました。 ↓PHPで実際に書いたソース ``` openssl_public_encrypt($str, $crypted, $this->encrypt_key_str); // $strが大きいと$cryptedがNULLになってしまう! ``` 参考)なぜ暗号化できないか仕組みを知った記事 ... そのため、共通鍵を作成し、共通鍵でファイルを暗号化したのち、共通鍵を公開鍵で暗号する方針を考えたのですが、ファイル受領側の復号の手間が増えるということで、案を練り直しました。 その際に、以下のようなコマンドで、容量の大きいファイルでも公開鍵暗号化方式で暗号化できることを知りました。 ``` openssl smime -encrypt -aes256 -in infile.txt -binary -outform DEM -out outfile.txt public_key.pem ``` PHPでも似たようなコマンドがありました。 ``` openssl_pkcs7_encrypt($infile, $outfile, $this->encrypt_key_str,[]); // $infileが大きくてもと$outfileが作成できる! ``` これらはS/MIMEを利用しているとのことですが、 なぜ公開鍵暗号化方式で暗号化できているのでしょうか。 不勉強で申し訳ありません、調べてみたのですがあまりよくわからず。。 ご回答いただければ幸いです。
回答: > > 共通鍵でファイルを暗号化したのち、共通鍵を公開鍵で暗号する方針を考えたのですが > > > S/MIME の暗号化がまさにその仕組みですよね。 の「1.4 電子署名と暗号化の手順」→「●暗号化」箇所