OpenSSL を使用して S/MIME 公開/秘密鍵ペアを作成し、OpenSSL コマンドを使用して暗号化と復号化を行います。openssl はほとんどの Linux オペレーティング システムに含まれていますが、PGP は含まれていないため、これは PGP を使用するよりも優れていると思います。また、OpenSSL は標準ベースであり、コマンドを実行すると、一般的に簡単に操作できます。
私は「純粋な PHP」ソリューションに反対することを推奨しました (純粋な PHP とは、PHP を使用して既存のライブラリまたは別の実行可能ファイルを呼び出すのではなく、PHP で暗号化を行うことを意味します)。PHP で一括暗号化を行いたくない場合。遅すぎる。また、OpenSSL はパフォーマンスが高く、セキュリティが十分に理解されているため、OpenSSL を使用したいと考えています。
これが魔法です。
X.509 キーを作成するには:
$subj="/C=US/ST=California/L=Remote/O=Country Govt./OU=My Dept/CN=Mr. Agent/emailAddress=agent@investiations.com"
openssl req -x509 -newkey rsa:1024 -keyout mycert.key -out mycert.pem -nodes -subj $subj
これにより、秘密鍵が mycert.key に、公開鍵が mycert.pem に配置されます。秘密鍵はパスワードで保護されていません。
次に、S/MIME でメッセージに署名するには:
openssl smime -sign -signer mycert.pem -inkey mycert.key <input >output
S/MIME でメッセージを暗号化するには:
openssl smime -encrypt -recip yourcert.pem <input >output
S/MIME でメッセージを復号化するには:
openssl smime -decrypt -inkey mycert.key -certfile mycert.pem <input >output
PHP からではなく、C 言語バインディングから OpenSSL を使用するデモもいくつかあります。