基本的には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 件のコメント:
コメントを投稿