勉強したことのメモ

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

PHP7 / 8でBlowfishアルゴリズムを用いた暗号化と復号化方法

  PHP

大分前にPHPでPearのCrypt_Blowfishパッケージを使用し、Blowfishアルゴリズムを用いた暗号化と復号化方法というのをメモしたが、PHP8の環境で使おうとするとエラーになる。どうもPHP7で非推奨になったみたい。そのため当該パッケージは使わずBlowfishアルゴリズムで暗号・復号化する方法をメモ。

 

対応方法

ソースコード

パスフレーズと初期化ベクトルは適宜変更すること。

<?php
define('PASSPHRASE', 'xxxxxxxxxx'); //パスフレーズ
define('VECROT', 'xxxxxxxxxx'); //初期化ベクトル
define('CIPHER_ALGO', 'bf-cbc'); //暗号メソッド

function passwordEncrypt($target){

    if( $m = strlen($target) % 8){
        $target .= str_repeat("\x00", 8 - $m);
    }

    $encrypt = openssl_encrypt(
        $target,
        CIPHER_ALGO,
        PASSPHRASE,
        OPENSSL_RAW_DATA | OPENSSL_NO_PADDING,
        VECROT,
    );

    return base64_encode($encrypt);
}

function passwordDecrypt($target){

    $decrypt = trim(
        openssl_decrypt(
            base64_decode($target),
            CIPHER_ALGO,
            PASSPHRASE,
            OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING,
            VECROT,
        )
    );

    return $decrypt;
}

$target = '暗号化したい文字列';

$test_encrypt = passwordEncrypt($target);
var_dump($test_encrypt); //string(44) "ef79hQpAM4ufxg1VB9dfSoG5wEQMt2f95k2omAe1azk=" 

$test_decrypt = passwordDecrypt($test_encrypt);
var_dump($test_decrypt); //string(27) "暗号化したい文字列" 

 

リファレンス

openssl_encrypt

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

openssl_decrypt

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

 

参考サイト

https://qiita.com/junk168/items/da2d8f73e388d6686776

https://qiita.com/Uchikoba/items/7784e1f1eb7bae3b1593

 - PHP

  関連記事

PHPで複数のファイルをまとめてzipファイル化し、ダウンロードさせる方法

PHPで複数のファイルをまとめてzipファイル化し、ユーザーにダウンロードさせた ...

日付の比較で○日前というのを調べる

PHP及びjavascriptで日付の比較をしたく、締切日とかではなく ○日前と ...

Codeigniter3で異なるデータベースを使用する

Codeigniterで2つのコンテンツがあって、それぞれ別のデータベースを使用 ...

CodeIgniter4 & jQueryを用いて同一サイト内でajax通信する方法

CodeIgniter4.4.4 & jQueryを用いて同一サイト内で ...

PHPでデータをファイルキャッシュさせる(Cache_Lite)

最近携わった案件でPHPでファイルキャッシュをしているシステムがあった。今までフ ...