テキストを可逆的な暗号化する Crypt_Blowfish
暗号化キーを使って、テキストを暗号化&複合化するPEARです。
[参考記事] ブロック暗号とは
[参考記事] PHPで暗号化・複合化を行う ブロック暗号
Crypt_Blowfish
インストール
pear install Crypt_Blowfish
PEARに追加インストールできない場合には、インクルードパスの追加で対応できます。
set_include_path( realpath(dirname(__FILE__) .DIRECTORY_SEPARATOR.'vendor' .DIRECTORY_SEPARATOR) . PATH_SEPARATOR . get_include_path());
Crypt_Blowfishには、mcryptが必要です。
libmcryptをインストールし、configureオプションに「--with-mcrypt」を付ける必要があります。
また、PHP5以降、libmcrypt 2.5.6以降が必要です。
サンプルコード
include_once 'Crypt/Blowfish.php'; $key = '【暗号化キー】'; $text = '【暗号化する文言】'; // Blowfishに暗号化キーを渡し、オブジェクトを生成する $blowfish = new Crypt_Blowfish($key); // 暗号化されたテキストを得る $encrypt = $blowfish->encrypt($text); // 暗号化されたテキストを得る $decrypt = $blowfish->decrypt($encrypt);
Crypt_Blowfishのバグ
複数回オブジェクトを生成すると、エラー『 The key is not initialized. 』が出る。
例
$blowfish = new Crypt_Blowfish($key); $encrypt = $blowfish->encrypt($text); $blowfish = new Crypt_Blowfish($key); $decrypt = $blowfish->decrypt($encrypt);
Bug #9638 Double calls to decrypt() method with same key do not reinitialize the _P array
2008年8月30日時点で修正されています。(1.1.0RC2以降)
OpenPNEでの使用例
// 下位互換のBlowfishを使うかどうか
define("OPENPNE_USE_OLD_CRYPT_BLOWFISH",false);
// 暗号化キー
define("ENCRYPT_KEY",false);
function &get_crypt_blowfish()
{
static $singleton;
if (empty($singleton)) {
if (OPENPNE_USE_OLD_CRYPT_BLOWFISH) {
include_once 'Crypt/BlowfishOld.php';
$singleton = new Crypt_BlowfishOld(ENCRYPT_KEY);
} else {
include_once 'Crypt/Blowfish.php';
$singleton = new Crypt_Blowfish(ENCRYPT_KEY);
}
}
return $singleton;
}
/**
* 可逆的な暗号化をする
*
* @param string $str 平文
* @return string 暗号文
*/
function t_encrypt($str)
{
if (!$str) return '';
$bf =& get_crypt_blowfish();
$str = $bf->encrypt($str);
//base64
$str = base64_encode($str);
return $str;
}
/**
* 可逆的な暗号を復号化する
*
* @param string $str 暗号文
* @return string 平文
*/
function t_decrypt($str)
{
if (!$str) return '';
//base64
$str = base64_decode($str);
$bf =& get_crypt_blowfish();
return rtrim($bf->decrypt($str));
}
関連記事
- PHPでwebサーバー(apache/nginx)の実行ユーザー・グループを確認する方法
- リクエストヘッダーやリクエストボディーなどを取得する方法
- 負荷が高いときには503エラーを返す方法
- サイトの更新情報をPINGサーバに送信する方法
- PHPでロードアベレージを表示させる方法
- PHPでTwitterのツイートをする/ツイート一覧を取得する/検索する(API v1.1)
- インクルードパスを設定する方法
- オブジェクト(Object)を配列(Array)に変換する方法
- PHPでgzip圧縮形式(gz圧縮)のファイルを読み書きする方法
- PHPでfacebook投稿時に公開範囲を指定する方法
- PHPで複数の画像をfacebookに投稿する方法
- PHPでfacebookのフィード(ウォール)に投稿する方法
- PHPでのfacebookアプリの認証処理(APIを使うユーザー認証)
- MySQL関数のまとめ
- MySQLサーバに接続できるかどうかを確認する
- ディレクトリ内のファイルのパーミッションを一括で変更する
- POSTでアップロードできるファイルサイズの制限を変更する方法
- 暗号化・複合化を行う ブロック暗号
- date型やdatetime型と年月日時分秒への変換
- 関数・メソッドの存在を調べる方法
- PHPでTwitterのbotを作る方法 ツイートをする/ツイート一覧を取得する(API v1)
- strtotimeの指定
- PHPでHTMLメールを送る方法
- ディレクトリセパレータを短く定義する DIRECTORY_SEPARATOR
- モザイク画像を作る方法
- HTML内のアクセス解析タグを除去する方法
- HTMLのTABLEタグを簡単にCSVファイルに変換する方法
- 画像表示のときに指定サイズにリサイズする(画像の拡大縮小)
- PHPでwhois検索をする Net_Whois
- よく使うヘッダー関数のまとめ
- キャリア・世代を判別する
- mb_send_mailでCCやBCCを指定する 表示名を指定する
- より高速に、推測困難な一意なIDを生成する方法
- 画像ファイルを指定容量ぎりぎりに圧縮する
- 指定したHTTPヘッダーが送信済みあるいは送信予定に含まれているか
- DOCUMENT ROOTを得る $_SERVER["DOCUMENT_ROOT"]は使えない!
- マルチバイト文字列(日本語文字)を一文字づつ取り出す
- ファイルを削除する/フォルダを削除する
- ファイルを読み込む/ファイルに書き込む
- ディレクトリ内のファイル一覧を取得する
- quoted-printable文字列の変換
スポンサーリンク





