uzullaがブログ

uzullaがブログです。

またまた誰も得しないPGPで暗号化テキスト作ってメールするメモ

某案件で使ったんですけど、もう一回使えない?といわれて探してみたら結構見つからなくて。危うくコードロストする所だったのでメモ書きです。
メール云々の所は解説しません。

コード

<?php
$body  = '暗号化するテキスト';
//相手がWindowsなので
$body = preg_replace("/\n/","\r\n", $body);
$body = mb_convert_encoding($body, 'SJIS-win', 'UTF-8');

$to = 'to@mail.addr';
$subject = 'メールタイトル';

$pubkey = "-----BEGIN PGP PUBLIC KEY BLOCK-----
※省略(公開鍵)
-----END PGP PUBLIC KEY BLOCK-----";
$encryptkey = '暗号化キー指定';

try{
 putenv("GNUPGHOME=/tmp");
 $res = gnupg_init();
 gnupg_import($res, $pubkey);
 gnupg_addencryptkey($res, $encryptkey);
 $enc = gnupg_encrypt($res, $body);
}catch( Exception $e ){
  echo "例外キャッチ:", $e->getMessage();
}

mb_send_mail($to,$subject,$enc);

おい、なんだこのメール送信周りのコードは、SJISってなめてんのか

これは自動的に解読されるわけじゃなくて、
暗号化されたメール本文をコピペして、ツールに喰わせて非暗号化する物なのです。
そしてお客様はWindowsをお使いだったのです。
なので、別にUTF-8でもいいけど、お客さんから「文字化けしてるぞ!」ってクレームがくるかもしれない。

復号化ってどうやってやんの?

RSA社のGUIなツールをつかうと、簡単にできた記憶があるんですが、なにせもうわすれました…。
まあフツーにgpgつかっても、復号できるはずです。

暗号化キーってなんぞ?

インポートされている公開鍵を指定するID(fingrprint)です。
調べ方?gpg --fingerprintとか。

インポートって一回でいいんじゃないの?

そうですね。まあでも毎回入れても取り合えず動きますよ。

この例外処理って必要・有用なの?

PHPerなので、参考にしたコードをそのまま使ってるのですよ!