Ejemplo n.º 1
0
 /**
  * データを暗号化する
  * @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;
 }