2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PEAR Crypt BlowfishをOpenSSLにリプレースする

Last updated at Posted at 2022-02-21

PHP5.5から7.3へのバージョンアップ作業で、
既存サーバで使用している暗号化ライブラリがPHP7.3で非推奨の Crypt_Blowfish だったため、
推奨されている OpenSSL にリプレースする必要がありました。

作成した関数

まずは完成したコードから。

openssl.php
    public function encrypt($plain_text)
    {
        // 暗号鍵の読込
        $pass_phrase = 'angoukanokagiwoiretene';

        // パディング処理
        if ($m = strlen($plain_text) % 8)
        {
            $plain_text .= str_repeat("\x00", 8 - $m);
        }

        $encrypt = openssl_encrypt(
            $plain_text,
            'bf-ecb',
            $pass_phrase,
            OPENSSL_RAW_DATA | OPENSSL_NO_PADDING
        );

       return base64_encode($encrypt);
    }

    public function decrypt($encrypted_text)
    {
        // 暗号鍵の読込
        $pass_phrase = 'angoukanokagiwoiretene';

        $decrypt = trim(
            openssl_decrypt(
                base64_decode($encrypted_text),
                'bf-ecb',
                $pass_phrase,
                OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING
            )
        );

        return $decrypt;
    }

シンプルなコードですが、この形になるまでに色々とつまずきました。

つまずいた項目

パディング処理の実装

テキストをパディングしてから暗号化する事は分かっていましたが、
見つけたサンプルコードもそれぞれ違う実装のため右往左往していました。
私の場合は下記ページの実装方法がドンピシャでした。

第二引数 暗号メソッド(cipher_algo)はどれなのか

正解はECBモードだったのですが、
CBCモードだと思い込んでいて気付くまで時間が掛かりました。

第四引数 指定するoptionsは何か(openssl_encrypt)

OPENSSL_RAW_DATA と OPENSSL_ZERO_PADDING のビット OR。

リファレンスでは上記の説明でしたが、
下記ページを参考に OPENSSL_NO_PADDING を指定し、
パディング除去が行われないようにする必要がありました。

第五引数 初期化ベクトル(Initialization Vector)が不要だった

BlowfishでIVを渡して使用していたため、
OpenSSLにリプレースする場合も第五引数にIVを渡すのが必須だと思い込んでいました。

Blowfishで使用していたIVをそのまま渡すと長さが違うと怒られるので、
IVにも何かしら処理を加えて渡さないといけないのか?と悩んでいました。

参考ページ

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?