基本的にはmanualに書いてある通りです。
受け取った文字をbase64でエンコードして、暗号化して、暗号化した文字もbase64でエンコードしています。
復号化の際も同じ感じです。
暗号・復号処理に関していつものことなのが、これがAESでうまく暗号化されているかはよく分からず、復号化がうまくいっているので良しとしています。
static public function Encrypt($value){
//Base64でエンコードする
$encodedValue = base64_encode($value);
/* 暗号モジュールをオープンします */
$td = self::getCryptModule();
/* データを暗号化します */
$encrypted = mcrypt_generic($td, $encodedValue);
//暗号化された文字をBase64でエンコードする
$encodedEncryptValue = base64_encode($encrypted);
/* 暗号化ハンドラを終了します */
mcrypt_generic_deinit($td);
/* モジュールを閉じます */
mcrypt_module_close($td);
return $encodedEncryptValue;
}
static public function Decrypt($value){
//Base64デコードする
$decodedValue = base64_decode($value);
/* 暗号モジュールをオープンします */
$td = self::getCryptModule();
/* 暗号化された文字列を復号します */
$decrypted = mdecrypt_generic($td, $decodedValue);
/* 復号ハンドルを終了し、モジュールを閉じます */
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
//Base64デコードする
$decodedDecryptValue = base64_decode($decrypted);
return $decodedDecryptValue;
}
static private function getCryptModule()
{
/* 暗号モジュールをオープンします */
//$td = mcrypt_module_open('tripledes', '', MCRYPT_MODE_ECB, '');
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_ECB, '');
/* IV を作成し、キー長を定義します。Windows では、かわりに
* MCRYPT_RAND を使用します */
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
$ks = mcrypt_enc_get_key_size($td);
/* キーを作成します */
$key = substr(md5('very secret key'), 0, $ks);
/* 復号用の暗号モジュールを初期化します */
mcrypt_generic_init($td, $key, $iv);
return $td;
}
0 件のコメント:
コメントを投稿