勉強したことのメモ

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

  関連記事

SendGridを使ってメールサーバを構築せずにPHPからメールを送信する方法

メールサーバを構築せずに独自ドメインのメールアドレスにてメール送信を行いたい。過 ...

PHPの$_SERVER["REMOTE_ADDR"]でIPアドレスが正常に取得できない場合

とある環境でPHPの$_SERVER["REMOTE_ADDR"]でIPアドレス ...

PHPでCookie保存時にSameSite属性を設定する方法

あるシステムのセキュリティ対策としてCookie保存時にSameSite属性をS ...

PHPでURLを解析してクエリ(GETパラメータ)を抽出する方法

formからGETで送信したクエリ(パラメータ)を、受信した側で抽出し、キーと値 ...

PHPで日時比較時の注意

PHPで日時を比較する際にミスがあったのでメモ。 基本形は下記。 $limit_ ...