Programmer's Reference Guide

導入

標準のフィルタクラス群

Zend Framework には、すぐに使える標準のフィルタ群が同梱されています。

Alnum

文字列 $value から、アルファベットおよび数字以外を取り除いたものを返します。 このフィルタでは、オプションとして空白文字を認めることもできます。

注意: アルファベットとは各言語で単語を構成する文字を意味します。 ただし、以下の言語では英語のアルファベットをアルファベットとして扱います:中国語、日本語、韓国語。 言語はZend_Localeで指定されます。

Alpha

文字列 $value から、アルファベット以外を取り除いたものを返します。 このフィルタでは、オプションとして空白文字を認めることもできます。

BaseName

ファイルへのパスを含む文字列を受け取り、 ファイルのベース名の部分のみを返します。

Decrypt

このフィルタは、指定した文字列を指定した設定で復号します。 復号の際に、アダプタを使用します。実際には、PHP の Mcrypt および OpenSSL 拡張モジュール用のアダプタを使用します。

コンテンツの暗号化方法の詳細については Encrypt フィルタを参照ください。 基本的な内容は Encrypt フィルタで網羅されているので、 ここでは追加のメソッドや復号時に固有のことなどについてのみ説明します。

Mcrypt の復号

Mcrypt で暗号化したコンテンツを復号するには、 暗号化を行った際に指定したオプションが必要です。

ここでひとつ暗号化時との大きな違いがあります。 暗号化の際にベクトルを指定しなかった場合は、コンテンツを暗号化した後で フィルタの getVector() メソッドを使用してベクトルを取得する必要があります。 正しいベクトルがなければ、コンテンツを復号することはできません。

オプションを指定しさえすれば、復号は暗号化と同じくらい単純なことです。

// デフォルト設定の blowfish を使用します
$filter = new Zend_Filter_Decrypt('myencryptionkey');

// コンテンツの暗号化用ベクトルを設定します
$filter->setVector('myvector');

$decrypted = $filter->filter('encoded_text_normally_unreadable');
print $decrypted;

        

注意: mcrypt 拡張モジュールが使用できない場合は例外が発生することに注意しましょう。

注意: また、インスタンス作成時あるいは setEncryption() をコールした際にすべての設定がチェックされることにも注意しましょう。 設定内容に問題があることを mcrypt が検知すると、例外がスローされます。

OpenSSL の復号

OpenSSL での復号は、暗号化と同様にシンプルです。 しかし、コンテンツを暗号化した人からすべてのデータを受け取る必要があります。

OpenSSL の復号には、以下が必要となります。

  • private: コンテンツの復号に使用する秘密鍵。 鍵ファイルのパスとファイル名を指定するか、 あるいは単に鍵ファイルの内容そのものを指定することもできます。

  • envelope: コンテンツを暗号化した人から受け取った、 暗号化されたエンベロープ鍵。 鍵ファイルのパスとファイル名を指定するか、 あるいは単に鍵ファイルの内容そのものを指定することもできます。

// openssl を使用し、秘密鍵を指定します
$filter = new Zend_Filter_Decrypt(array('adapter' => 'openssl', 'private' => '/path/to/mykey/private.pem');

// もちろん、初期化時にエンベロープ鍵を指定することもできます
$filter->setEnvelopeKey(array('/key/from/encoder/first.pem', '/key/from/encoder/second.pem');

        

注意: OpenSSL アダプタは、正しい鍵を渡さないと動作しないことに注意しましょう。

オプションで、パスフレーズを渡さなければ鍵を復号できないようにすることもできます。 そのために使用するのが setPassphrase() メソッドです。

// openssl を使用し、秘密鍵を指定します
$filter = new Zend_Filter_Decrypt(array('adapter' => 'openssl', 'private' => '/path/to/mykey/private.pem');

// もちろん、初期化時にエンベロープ鍵を指定することもできます
$filter->setEnvelopeKey(array('/key/from/encoder/first.pem', '/key/from/encoder/second.pem');
       ->setPassphrase('mypassphrase');

        

最後に、コンテンツを復号します。 暗号化したコンテンツの復号を行う完全な例は、このようになります。

// openssl を使用し、秘密鍵を指定します
$filter = new Zend_Filter_Decrypt(array('adapter' => 'openssl', 'private' => '/path/to/mykey/private.pem');

// もちろん、初期化時にエンベロープ鍵を指定することもできます
$filter->setEnvelopeKey(array('/key/from/encoder/first.pem', '/key/from/encoder/second.pem');
       ->setPassphrase('mypassphrase');

$decrypted = $filter->filter('encoded_text_normally_unreadable');
print $decrypted;

        

Digits

文字列 $value から、数字以外を取り除いたものを返します。

Dir

パス文字列からディレクトリ名を返します。

Encrypt

このフィルタは、指定した設定で任意の文字列を暗号化します。 暗号化の際に、アダプタを使用します。実際には、PHP の Mcrypt および OpenSSL 拡張モジュール用のアダプタを使用します。

これら 2 つの暗号化手法はまったく異なる方式なので、 アダプタの使用法もそれぞれ異なります。 フィルタを初期化する際に、どのアダプタを使うかを選ばなければなりません。

// Mcrypt アダプタを使用します
$filter1 = new Zend_Filter_Encrypt(array('adapter' => 'mcrypt'));

// OpenSSL アダプタを使用します
$filter2 = new Zend_Filter_Encrypt(array('adapter' => 'openssl'));

    

別のアダプタを設定するために setAdapter() を使用することもできます。また getAdapter() メソッドで、実際に設定されているアダプタを取得することができます。

// Mcrypt アダプタを使用します
$filter = new Zend_Filter_Encrypt();
$filter->setAdapter('openssl');

    

注意: adapter オプションを指定しなかったり setAdapter を使用しなかったりした場合は、デフォルトで Mcrypt アダプタを使用します。

Mcrypt での暗号化

Mcrypt 拡張モジュールをインストールすると、 Mcrypt アダプタが使えるようになります。 このアダプタは、初期化時のオプションとして以下をサポートしています。

  • key: 暗号化用の鍵。 入力を暗号化する際に使用します。 復号する際にも同じ鍵が必要です。

  • algorithm: 使用するアルゴリズム。 » PHP マニュアルの mcrypt のページ であげられている暗号化アルゴリズムのいずれかでなければなりません。 省略した場合のデフォルトは blowfish です。

  • algorithm_directory: アルゴリズムが存在するディレクトリ。 省略した場合のデフォルトは、mcrypt 拡張モジュールで設定されているパスです。

  • mode: 使用する暗号化モード。 » PHP マニュアルの mcrypt のページ であげられているモードのいずれかでなければなりません。 省略した場合のデフォルトは cbc です。

  • mode_directory: モードが存在するディレクトリ。 省略した場合のデフォルトは、mcrypt 拡張モジュールで設定されているパスです。

  • vector: 使用する初期化ベクトル。 省略した場合はランダムなベクトルとなります。

配列ではなく文字列を指定した場合は、その文字列を鍵として使用します。

初期化した後で暗号化の値を取得したり設定したりするには、それぞれ getEncryption() および setEncryption() メソッドを使用します。

注意: mcrypt 拡張モジュールが使用できない場合は例外が発生することに注意しましょう。

注意: また、インスタンス作成時あるいは setEncryption() をコールした際にすべての設定がチェックされることにも注意しましょう。 設定内容に問題があることを mcrypt が検知すると、例外がスローされます。

暗号化ベクトルの取得や設定には、それぞれ getVector() および setVector() を使用可能です。指定した文字列が、 そのアルゴリズムに必要なベクトルのサイズに応じて切り詰められたり伸ばされたりします。

注意: 自前のベクトル以外を使用する場合は、 そのベクトルを取得してどこかに保存しておかなければならないことに注意しましょう。 そうしないと、文字列が復号できなくなります。

// デフォルト設定の blowfish を使用します
$filter = new Zend_Filter_Encrypt('myencryptionkey');

// 自前のベクトルを設定します。それ以外の場合は getVector()
// をコールしてベクトルを保存しておかないと、後で復号できなくなります
$filter->setVector('myvector');
// $filter->getVector();

$encrypted = $filter->filter('text_to_be_encoded');
print $encrypted;

// 復号の方法は Decrypt フィルタを参照ください

        

OpenSSL での暗号化

OpenSSL 拡張モジュールをインストールすると、 OpenSSL アダプタが使えるようになります。 このアダプタは、初期化時のオプションとして以下をサポートしています。

  • public: 暗号化したコンテンツを渡したい相手の公開鍵。 複数の公開鍵を指定するには、配列を使用します。 鍵ファイルのパスとファイル名を指定するか、 あるいは単に鍵ファイルの内容そのものを指定することもできます。

  • private: コンテンツの暗号化に使用する、あなたの秘密鍵。 鍵ファイルのパスとファイル名を指定するか、 あるいは単に鍵ファイルの内容そのものを指定することもできます。

後から公開鍵を取得あるいは設定するには、getPublicKey() および setPublicKey() メソッドを使用します。 秘密鍵についても、getPrivateKey() および setPrivateKey() メソッドで取得あるいは設定することができます。

// openssl を使用し、秘密鍵を指定します
$filter = new Zend_Filter_Encrypt(array('adapter' => 'openssl', 'private' => '/path/to/mykey/private.pem');

// もちろん、初期化時に公開鍵を指定することもできます
$filter->setPublicKey(array('/public/key/path/first.pem', '/public/key/path/second.pem');

        

注意: OpenSSL アダプタは、正しい鍵を渡さないと動作しないことに注意しましょう。

鍵自体も暗号化したい場合は、パスフレーズを setPassphrase() メソッドで渡します。 パスフレーズつきで暗号化したコンテンツを復号したい場合は、 公開鍵だけではなく (暗号化された鍵を復号するための) パスフレーズも必要となります。

// openssl を使用し、秘密鍵を指定します
$filter = new Zend_Filter_Encrypt(array('adapter' => 'openssl', 'private' => '/path/to/mykey/private.pem');

// もちろん、初期化時に公開鍵を指定することもできます
$filter->setPublicKey(array('/public/key/path/first.pem', '/public/key/path/second.pem')
       ->setPassphrase('mypassphrase');

        

最後に、OpenSSL を使用した場合に受け手に渡す必要があるものをまとめます。 暗号化されたコンテンツ、パスフレーズを使用した場合はそのパスフレーズ、 そして復号用のエンベロープ鍵。これらが必要となります。

つまり、暗号化を終えたらエンベロープ鍵を取得する必要があるということです。 取得するには getEnvelopeKey() メソッドを使用します。

OpenSSL でコンテンツの暗号化を行う完全な例は、このようになります。

// openssl を使用し、秘密鍵を指定します
$filter = new Zend_Filter_Encrypt(array('adapter' => 'openssl', 'private' => '/path/to/mykey/private.pem');

// もちろん、初期化時に公開鍵を指定することもできます
$filter->setPublicKey(array('/public/key/path/first.pem', '/public/key/path/second.pem')
       ->setPassphrase('mypassphrase');

$encrypted = $filter->filter('text_to_be_encoded');
$envelope  = $filter->getEnvelopeKey();
print $encrypted;

// 復号の方法は Decrypt フィルタを参照ください

        

HtmlEntities

文字列 $value について、 HTML エンティティが存在するものについてはそのエンティティに変換したものを返します。

Int

(int) $value を返します。

StripNewlines

文字列 $value から一切の改行制御文字を取り除いたものを返します。

RealPath

入力されたパスのすべてのシンボリックリンクを展開し、'/./'、'/../' や余分な '/' の参照を解決して正規化された絶対パスを返します。 この結果、パスにはシンボリックリンクや '/./' あるいは '/../' が含まれなくなります。

Zend_Filter_RealPath は、 ファイルが存在しないなどで失敗した場合に FALSE を返します。 BSD システムでは、パスの最後の部分だけが存在しない場合には Zend_Filter_RealPath は失敗しません。しかし他のシステムではこのような場合も FALSE を返します。

StringToLower

文字列 $value の英字を小文字に変換したものを返します。

StringToUpper

文字列 $value の英字を大文字に変換したものを返します。

StringTrim

文字列 $value の先頭と末尾から文字を取り除いたものを返します。

StripTags

入力文字列からすべての HTML タグおよび PHP タグを取り除いた結果を返します。 ただし明示的に許可したタグは取り除きません。 どのタグを許可するかだけではなく、すべてのタグにおいてどの属性を許可するか、 特定のタグだけで許可する属性は何かなども指定できます。 また、コメント (<!-- ... -->) を除去するかそのまま残すかも指定できます。


導入
blog comments powered by Disqus

Select a Version

Languages Available

Components

Search the Manual