PHP7.2以上でRijndael-256を扱う方法【mcrypt】
PHP5.*からPHP7.3やら7.4にバージョンアップしないといけない人は今でも多いと思いますが、PHP7.2以上で削除されたmcryptをどうするか。
mcryptとOpensslの互換性
opensslを使用するべきなのは間違いないと思うのですが、移行する際にmcryptで暗号化したデータや文字列を、移行後のソースコードで扱わないといけない場合がなかなか厄介です。
mcryptの暗号化方式とopensslの暗号化方式は意外と互換性がなく、わずか4ペアしかないようです。
mcrypt_method|openssl_method
PHP 7.2で消えるMcryptの扱い
cast-128 | cast5
rijndael-128 | aes-256
des | des
blowfish | bf
自分の場合に困ったのは、ポピュラーな方式だと思われていたrijndaelが128以外はopensslでは扱われていなかったことです。具体的にはrijndael-256が使えなかったのがつらいところでした。
しょうがないので、mcryptが使えるバージョンのPHPを動かすサーバーを残しておいて、移行期間はその処理専用に利用しようかとも思いました。しかし、それをやってしまうと構成が複雑化するうえに、運用もミスを生みやすいので、できれば行いたくありません。
PHP7.2以上でrijndael-256を扱う方法
なんとかPHP7.2以降でrijndael-256を扱えないか調べたところ、PHP7.2でmcryptは削除されるものの、コアから削除されるだけでPECLには残ることがわかりました。
詳細は以下の記事を参考。
PHP7.2 に mcrypt をインストールする方法(ただし非推奨!)
PECLはC拡張なので、composerでは導入できませんが、yumなどでインストールできます。
私は今回centos7でインストールしました。PHPはremiインストールしていたので、mcyptもremi経由で入れました。
sudo yum -y install --enablerepo=epel,remi,remi-php73 php-mcrypt