PHP7.2以上でRijndael-256を扱う方法【mcrypt】

2020年3月15日PHPPHP, レガシーコード

 PHP5.*からPHP7.3やら7.4にバージョンアップしないといけない人は今でも多いと思いますが、PHP7.2以上で削除されたmcryptをどうするか。

mcryptとOpensslの互換性

opensslを使用するべきなのは間違いないと思うのですが、移行する際にmcryptで暗号化したデータや文字列を、移行後のソースコードで扱わないといけない場合がなかなか厄介です。

mcryptの暗号化方式とopensslの暗号化方式は意外と互換性がなく、わずか4ペアしかないようです。

mcrypt_method|openssl_method
cast-128 | cast5
rijndael-128 | aes-256
des | des
blowfish | bf

PHP 7.2で消えるMcryptの扱い

自分の場合に困ったのは、ポピュラーな方式だと思われていた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

サイト運営者 えぬたけ


都内で働くゆるふわフルスタックwebエンジニア。