こんにちは。
職人見習いの木村です。
前回のエントリー(GnuPGを使ってファイルを暗号化(Linux偏))では、暗号化&復号化をLinux上で行いましたが、今回は、PHPで暗号化し、WindowsPCで復号化する方法を紹介します。
流れは、以下のようになります。
- PHPでファイルを暗号化
- PHPで暗号化されたファイルを添付したメールを送信
- WindowsPCでメールを受け取り、ツールを使って復号化
それでは、順番に進めていきます。
まず、PHPのexec関数でcsvファイルを暗号化します。
Apacheユーザーにはgpgの実行権限がないので、sudoして実行します。
exec('sudo /usr/bin/gpg -e -a -r hoge@hoge.com hoge.csv 2>&1',$output,$ret_val);
この時、「sudo: sorry, you must have a tty to run sudo」とエラーが出る場合は、/etc/sudoersの
にコメントアウトをしてあげると、エラーが無くなります。
Defaults requiretty
これで、暗号化は出来ました。
次に、添付ファイル付きのメールを送ります。
mb_send_mailでは添付ファイル付きメールは送信できないので、PHPMailerを使います。
require_once("class.phpmailer.php"); $to = "hoge@hoge.com"; //宛先 $subject = "添付ファイル暗号化メール"; //題名 $body = "添付ファイルをご確認ください。"; //本文 $from = "hoge@hoge2.com"; //差出人 $attachfile = "hoge.csv"; //添付ファイルパス $mail = new PHPMailer(); $mail->CharSet = "iso-2022-jp"; $mail->Encoding = "7bit"; $mail->AddAddress($to); $mail->From = $from; $mail->FromName = mb_encode_mimeheader(mb_convert_encoding($fromname,"JIS","UTF-8")); $mail->Subject = mb_encode_mimeheader(mb_convert_encoding($subject,"JIS","UTF-8")); $mail->Body = mb_convert_encoding($body,"JIS","UTF-8"); //添付ファイル追加 $mail->AddAttachment($attachfile); if (!$mail->Send()){ echo("メールが送信できませんでした。エラー:".$mail->ErrorInfo); }
これで、暗号化されたファイルが添付されたメールが送信されました。
それでは、届いたメールの添付ファイルを復号化してみます。
今回は、Gpg4winというソフトを使って復号化します。
まず、http://www.gpg4win.org/download.htmlよりGpg4winを入手し、インストールします。
次に秘密鍵(secring.gpg)をインポートします。
インポートが出来たら、実際にファイルを復号化していきます。
まずは、復号化したいファイルを選択します。
ファイルを選択したら、復号化を開始します。
パスフレーズを聞かれるので、設定したパスフレーズを入力します。
復号化が完了されると以下のような画面になります。
以上のような手順で、PHPでの暗号化、Windowsでの復号化ができます。
個人情報を扱うフォーム送信の際に使える方法です。
※この記事は、なかの人(moresmileman)が書いています。