公開鍵暗号方式でphpを使って暗号化と復号を試した
仕事で公開鍵渡すので〜と言われ、仕組みは知ってるがやったことなかったので
opensslで鍵を作成して、今仕事で使っているPHPを使ってメッセージの暗号化、復号を試したので自分用のメモ
鍵を作る
まずは以下の記事を参考に秘密鍵と公開鍵を作る
# private key openssl genrsa 1024 > private-key.pem # public key openssl rsa -in private-key.pem -pubout -out public-key.pem
ディレクトリ構成
key_check ├── decrypt.php ├── encrypt.php ├── private-key.pem └── public-key.pem
phpのコード
Encrypt
まずは公開鍵を使用して「まいやんが世界一かわいい」*1というメッセージを暗号化する。
<?php // encrypt.php $msg = 'まいやんが世界一かわいい'; // 鍵情報の読み込み $keyPath = dirname(__FILE__).'/public-key.pem'; $key = file_get_contents($keyPath); // 結果が$crypted変数に入っている openssl_public_encrypt($msg, $crypted, $key); // $cryptedに入っているのはバイナリなのでbase64して表示する echo base64_encode($crypted).PHP_EOL;
openssl_public_encryptの仕様
http://php.net/manual/ja/function.openssl-public-encrypt.php
Decrypt
それで表示された文字をdecrypt.phpでデコードする
<?php // decrypt.php $msg = '/* ここにencrypt.phpの結果として表示されたものを入力する */'; // 鍵情報の読み込み $keyPath = dirname(__FILE__).'/private-key.pem'; $key = file_get_contents($keyPath); $decodeBody = base64_decode($msg); // 結果が$decrypted変数に入る openssl_private_decrypt($decodeBody, $decrypted, $key); echo $decrypted . PHP_EOL; // => "まいやんが世界一かわいい"
openssl_private_decryptの仕様
http://php.net/manual/ja/function.openssl-private-decrypt.php
まとめ
検索すると以外と簡単にできるんですね
ただ普段PHPを触ってないので、毎回file_get_contents
の結果ってどこに保持しておくべきなのかとかよくわからないです。。
たぶんこの案件が終わるとまたPHP触らなくなってしまうので、言語ではなく暗号についてちょっと勉強したい気持ちは出てきたので、積本消化したら次は暗号技術入門とか買ってみようかと考えてます
- 作者:結城 浩
- 発売日: 2015/08/26
- メディア: 単行本