PHP7 / 8でBlowfishアルゴリズムを用いた暗号化と復号化方法
大分前に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
参考サイト
関連記事
-
-
PHPからDBX Platformを利用してDropbox内のファイルを削除する方法
以前にPHPからDropboxのファイル一覧のデータ(ファイル名や更新日時等)を ...
-
-
PHPで配列を確認する際にvar_dumpよりも見やすくなるdBug.phpの利用方法
PHPで配列を確認する際、大抵var_dumpで出力させているがこれが見づらい。 ...
-
-
ソシャゲのガチャのように当選確率が異なる抽選システムをPHPで作成する方法
ソシャゲのガチャみたいな当選確率が異なる抽選システムをPHPで作成したかった。具 ...
-
-
PhpSpreadsheetでフォーマット用のエクセルを読み込み、指定したセルにデータを書き込んだ上で別名で保存する方法
PHPで納品書等のフォーマット用のExcelを読み込み、指定したセルにデータを書 ...
-
-
CodeIgniter4で簡易版ログインシステムの実装方法(管理画面向け)
CodeIgniter4で管理画面向けの簡易版ログインシステムを作成したい。通常 ...