このエントリーをはてなブックマークに追加

更新日: 2016年2月25日

実行時間: 0.0108

CI_Encrypt

 「CI_Encrypt」クラスは、暗号化・暗号複合化とハッシュ計算の機能を提供します。

 暗号化・暗号複合化には、PHPの「Mcrypt」モジュールが利用可能であればそれを利用し、 利用可能な環境でなければ「XOR暗号/複合」を行い暗号化・暗号複合化の機能を提供しています。

 CodeIgniterのバージョン「2.2.0」から「XOR暗号」が廃止になりました。
それに伴い、「Mcrypt」モジュールが必須となっています。

Mcryptモジュール

 一般的なWebアプリケーションでは、「XOR暗号/複合」でも十分なセキュリティは確保できるでしょう。  しかし、 クレジットカード情報など、重要な情報を扱うアプリケーションを開発する場合は、 より高度な暗号アルゴリズムが必要になってきます。

 PHPの「Mcrypt」モジュールが利用可能かどうかの確認は以下のようにします。

    $ php -i | grep 'mcrypt support'
    $ php -m |grep mcrypt

     上記コマンドでそれぞれの文字列が「grep」されれば利用可能です。

Mcryptモジュールのインストール

 もし、「Mcrypt」モジュールがインストールされておらず、利用したい場合は 以下のようにしてインストールします。(RedHat系 Linux環境を想定しています)

  • EPELリポジトリの利用
  • # rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
  • PHP 5.3 環境
  • # yum install php53-mcrypt
  • PHP 5.1 環境
  • # yum install php-mcrypt

CI_Encryptの設定とロード

 「CI_Encrypt」クラスを利用するには、「application/config/config.php」の「$config['encryption_key'] 」に 32文字以上の暗号化キーフレーズを設定しておく必要があります。

  • application/config/config.php
  • $config['encryption_key'] = 'fb920b3f499b37969b2e4cadb14b6583'; //
  • CI_Encryptのロード
    $this->load->library('encrypt');

CI_Encryptの暗号化機能

get_key($key = '') 一番上に戻る

 引数を指定しないで実行した場合、現在のインスタンス変数にセットされている「暗号キーフレーズ」があればそれを返します。
 インスタンス変数に「暗号キーフレーズ」がセットされていない場合は、設定ファイル「application/config/config.php」 に設定されている値を「md5()」関数でハッシュ化した文字列を返します。
 また、引数を指定した場合、その値を「md5()」関数でハッシュ化した文字列を返します。

    $key = $this->encrypt->get_key();

set_key($key = '') 一番上に戻る

 インスタンス変数に「暗号キーフレーズ」をセットします。通常は、設定ファイルの値がセットされるため、 動的にこれを変更したい場合に実行します。

    $this->encrypt->set_key('fb920b3f499b37969b2e4cadb14b6583');

encode($string, $key = '') 一番上に戻る

 第一引数に指定された値を暗号化し、暗号化したデータを「base64エンコード」した文字列を返します。

 「Mcrypt」モジュールが利用できる環境では、それを利用して暗号化します。 「Mcrypt」モジュールが利用できない環境では「XOR暗号」で暗号化します。  CodeIgniterのバージョン2.2.0から「Mcrypt」モジュールが必須となり、「XOR暗号」が廃止になりました。

 暗号キーフレーズを動的に指定したい場合は、第二引数に指定することができます。

    $string = '秘密情報';
    $enc_string = $this->encrypt->encode($string);
    $key = 'fb920b3f499b37969b2e4cadb14b6583';
    $string = '秘密情報';
    $enc_string = $this->encrypt->encode($string, $key);

decode($string, $key = '') 一番上に戻る

 暗号化されたデータを複合化します。

 「encode()」メソッドで暗号化する際に、第二引数でキーフレーズを指定した場合、 それと同じキーフレーズを第二引数に指定して複合化する必要があります。

    $string = $this->encrypt->decode($enc_string);

set_cipher($cipher) 一番上に戻る

 「Mcrypt」モジュールが利用できる場合にこのメソッドで、「Mcrypt」の暗号アルゴリズムを デフォルトの「MCRYPT_RIJNDAEL_256」から変更することができます。

 指定できる暗号アルゴリズムは、「PHPマニュアル」 を参照してください。

    $string = $this->encrypt->set_cipher(MCRYPT_BLOWFISH);

set_mode($mode) 一番上に戻る

 「Mcrypt」モジュールが利用できる場合にこのメソッドで、「Mcrypt」のブロック暗号モードを デフォルトの「MCRYPT_MODE_ECB」から変更することができます。

 指定できるブロック暗号モードは、「PHPマニュアル」 を参照してください。

 暗号化アルゴリズムとブロック暗号モードの組み合わせによっては暗号化できないものがあるので注意が必要です。

    $string = $this->encrypt->set_cipher(MCRYPT_MODE_CBC);

CI_EncryptのHASH機能

set_hash($type = 'sha1') 一番上に戻る

 ハッシュ値を求める計算方式を指定します。
 デフォルトでは「sha1」を利用しますが、「md5」を利用したい場合はこのメソッドで変更します。

    $this->encrypt->set_hash('md5');

hash($str) 一番上に戻る

 引数で指定したデータのハッシュ値を計算して返します。
 計算方式はデフォルトで「sha1」です。

    $hash = $this->encrypt->hash('パスワードとか');

sha1($str) 一番上に戻る

 「sha1」で計算したハッシュ値を返します。

    $hash = $this->encrypt->sha1('パスワードとか');