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
参考サイト
関連記事
-
-
mysqldumpが使えないレンタルサーバでMySQLのバックアップ
mysqldumpが使えないレンタルサーバで開発を行うことがあり、尚且つ他社に使 ...
-
-
PHPでルーティング用ライブラリ「AltoRouter」の利用方法
PHPフレームワークのCodeIgniterを勉強していた際にルーティング機能が ...
-
-
Facebookのタイムラインを取得して表示する方法
Facebookのタイムラインを取得してきて、表示させたいという案件があった。 ...
-
-
PHPで多次元連想配列のキーを指定してソート
やりたかった事は、 ・多次元配列があってcodeというキーでソートしたい という ...
-
-
PHPから他サーバのAPIに対してPOST送信する方法
PHPから他サーバのAPIに対してPOSTでリクエストしたかった。GETだったら ...