勉強したことのメモ

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とSQLiteで簡易BBSの作成
PHPとSQLiteで簡易BBSの作成

PHPとSQLiteの練習で簡易掲示板を作ったのでメモ。   目次1 ...

ブログサービスの様にサブドメインを動的に生成する方法   
ブログサービスの様にサブドメインを動的に生成する方法  

ブログサービスの様に「hoge」というログインIDを作成した際「hoge.blo ...

TCPDF「Could not include font definition」エラーの対処方法
TCPDF「Could not include font definition」エラーの対処方法

TCPDFでフォントを「arialunicid0」に指定したところ「TCPDF ...

バニラPHPでフラッシュデータ(フラッシュメッセージ)機能を実装する方法
バニラPHPでフラッシュデータ(フラッシュメッセージ)機能を実装する方法

PHPフレームワークのCodeIgniterを勉強していた際にページ遷移好みに表 ...

htaccessではなくPHPでベーシック認証をかける方法
htaccessではなくPHPでベーシック認証をかける方法

htaccessではなくPHPでベーシック認証をかける方法についてソースコードを ...