勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHPのOpenSSL関数で文字列の暗号・復号化を行う方法

  PHP

だいぶ前にPHPでBlowfishアルゴリズムを用いた暗号化と復号化する方法をメモしたが、そちらはPearのCrypt_Blowfishパッケージというものを導入する必要があった。今回はパッケージの導入等は無しでPHPのデフォルトの機能で何とかしたかった。以下に対応方法をメモ。

 

対応方法

ソースコード

<?php
$data = '暗号化したい内容';
$method = 'AES-256-CBC';
$key = openssl_random_pseudo_bytes(16);
$options = 0;
$iv = openssl_random_pseudo_bytes(16);

$encrypt = openssl_encrypt( $data, $method, $key, $options, $iv );
var_dump($encrypt); //string(44) "Nopuo9XSg1/jWW4BEyXyG+JJu3ND6m2EfCAoFaUcOGg="

$decrypt = openssl_decrypt( $encrypt, $method, $key, $options, $iv );
var_dump($decrypt); //string(24) "暗号化したい内容"

注意点

上記ソースコードでは$key / $ivをopenssl_random_pseudo_bytes関数を用いてランダムな文字列を生成しているが、実際に使用する場合はランダムな文字列を生成後にデータベース等に登録する必要がある点に注意する(ページを跨いだ際に文字列が再生成されて復号化できなかったりするため)。

 

リファレンス

openssl_encrypt

https://www.php.net/manual/ja/function.openssl-encrypt.php

openssl_decrypt

https://www.php.net/manual/ja/function.openssl-decrypt.php

openssl_random_pseudo_bytes

https://www.php.net/manual/ja/function.openssl-random-pseudo-bytes.php

 - PHP

  関連記事

PHPでeval実行時に「eval()'d code on line」エラー

PHPでeval実行時に「eval()'d code on line 〇〇」とい ...

PHPで画像を分割し並べ替えて出力したものをJavaScriptで復元する方法

ある電子書籍サイトをブラウザの開発者ツールで見てみたところ、PHPでページ画像を ...

imgタグのsrc属性のURLにPHPでタイムスタンプを付与しキャッシュ対策する方法

imgタグで画像を表示する際、画像を書き換えても同じものが表示されるというケース ...

PHPで「php-qrcode-detector-decoder」ライブラリを使用してQRコードをデコードする方法

PHPでQRコードの画像をデコードし、値を変数等に格納したい。何とかならないか調 ...

PHPで定義済みの変数 / 定数とincludeしているファイル一覧を取得する方法

他社が作成されたPHPのファイルを読み解く際に、定義済みの変数 / 定数や、in ...