勉強したことのメモ

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

  関連記事

CodeIgniter4で特定のページにアクセスがあった際に301リダイレクトさせる方法
CodeIgniter4で特定のページにアクセスがあった際に301リダイレクトさせる方法

CodeIgniter4で特定のページにアクセスがあった際に301リダイレクトさ ...

PHPでフォーム送信の際に禁止ワードのチェック及び制限をかける方法
PHPでフォーム送信の際に禁止ワードのチェック及び制限をかける方法

掲示板等のformを送信する際に特定の禁止ワードが含まれていないかチェックするプ ...

PHPのhash_file関数でファイルの改ざんを検知する方法
PHPのhash_file関数でファイルの改ざんを検知する方法

サイト内の特定の数ページのみ簡易的なものでも良いので自動でファイルの改ざんチェッ ...

PHP Simple HTML DOM Parserを使用したスクレイピング方法
PHP Simple HTML DOM Parserを使用したスクレイピング方法

PHPでスクレイピングする際、preg_match_all等を用いて必要なデータ ...

CodeIgniter4でコントローラ実行の前後に指定したイベントを実行する方法
CodeIgniter4でコントローラ実行の前後に指定したイベントを実行する方法

CodeIgniter4で特定の条件の場合は指定したページにリダイレクトさせたい ...