/** * データを暗号化する * @param 配列キー:value, key, iv, algorithm, mode, prefix, suffix * パディング防止が必要な場合は、'prefix'と'suffix'を指定する。 * 'prefix'と'suffix'には、メタ文字( . \ + * ? [ ^ ] ( $ ) )のみ指定できます。 * @return 配列キー:encrypted, iv */ public static function encrypt($arguments) { // 引数のチェック if (false === isset($arguments['value']) || 0 === strlen($arguments['value']) || false === isset($arguments['key']) || 0 === strlen($arguments['key'])) { return false; } if (false === isset($arguments['algorithm']) || 0 === strlen($arguments['algorithm'])) { $arguments['algorithm'] = 'rijndael-128'; } if (false === isset($arguments['mode']) || 0 === strlen($arguments['mode'])) { $arguments['mode'] = 'cbc'; } // XXX log処理入れる if (isset($arguments['prefix']) && isset($arguments['suffix'])) { $value = $arguments['prefix'] . $arguments['value'] . $arguments['suffix']; } elseif (false === isset($arguments['prefix']) && false === isset($arguments['suffix'])) { $value = $arguments['value']; } else { return false; } // 暗号モジュールをオープン $cipherHandler = mcrypt_module_open($arguments['algorithm'], $algorithm_directory = '', $arguments['mode'], $mode_directory = ''); // pad $value = self::pad($value, mcrypt_enc_get_iv_size($cipherHandler)); // IVの初期化処理 self::$iv = NULL; if (isset($arguments['iv'])) { self::$iv = $arguments['iv']; } // IVが指定されていない場合、IV を作成 if (NULL === self::$iv) { self::$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($cipherHandler), MCRYPT_DEV_RANDOM); } // 暗号化処理を初期化 mcrypt_generic_init($cipherHandler, $arguments['key'], self::$iv); // データを暗号化 $encryptedData = mcrypt_generic($cipherHandler, $value); // 暗号化ハンドラを終了 mcrypt_generic_deinit($cipherHandler); // モジュールをクローズ mcrypt_module_close($cipherHandler); return $encryptedData; }