がるです。uheuheさんの「Crypt_Blowfish はECBモードで暗号化されます。」を受けて…補足させてください。
# & フォロー本当にありがとうございます > uheuheさん
ECBモードは「最も楽な実装」ですが、同時に「原則として用いてはいけない」モードなので(苦笑
もし、PEAR::Crypt_Blowfishが「ECBモード以外不可」だとすると…お使いになられないことをお勧めいたします。
ちぃと以前に書いた文章があるので、一部引っ張ってきます。
1.1 ECB モード
エレクトリックコードブック
Electric Codebookの略。もっとも単純でもっとも脆弱なブロック暗号の
モード。
流れとしては以下の通り。
1. 平文からブロック長分を切り出す
2. 切り出した平文と鍵から暗号化する
この繰り返しである。なお、ブロック長が割り切れない(端数が出る) 場合、
パディング
paddingと呼ばれるダミーデータを入れる3。
ECB モードにおいて「別ブロックで同一内容が同一の暗号文となる」ため
に非常に解析が容易であるほかに、場合によっては「解読せずに暗号文の改
ざんが可能である」場合がある4。
したがって、大抵用意されているモードではあるが、絶対に使ってはいけ
ない。
1.2 CBCモード
サイファブロックチェイニング
Cipher Block Chainingの略。
1. 平文からブロック長分を切り出す
2. 一つ前の暗号文と平文をXOR する
3. 上述のXOR したデータと鍵で暗号化する
この繰り返しによって、EBC モードにあるような「同一の平文から同一の
暗号文が出力される」ことを回避する。
なお、1番目のブロックを暗号化する場合は当然ながら「一つ前の暗号文」
がない。そのために、
イニシャライゼーションベクタ
Initialization vector(初期化ベクトル)、略称でIV と呼
ばれる乱数を用いる5。
CBC モードの問題点の一つは「暗号化においては並列処理ができない」こ
とである6 。したがって性能が求められる場合に問題になる場合がある。
また「1 bit の欠落によって以降の全てのブロック処理に影響が出る」の
も、通信環境が悪い場合には憂慮すべき問題点となる場合がある。
ただ、通常はCBC モードがもっとも一般的に用いられていると考えてよい。
1.5 CTRモード
カウンタ
CounTeRの略。カウンタ値を暗号化してその値を鍵ストリームとして用い
ることで暗号化を行う。
1. カウンタ値をインクリメント、暗号化する
2. 平文からブロック長分を切り出す
3. 切り出した平文と1番で暗号化した文字列をXOR して、これを暗号文
とする
なお、1ブロック目の暗号に用いるカウンタ値は、ブロック長の上位半分
を乱数9、下位半分を0とする「初期値」を毎回生成する。
CFB、OFB と似たような構造を持つ「ストリーム的な暗号化」ではあるが
10、CTR モードは「任意のブロックごとに処理ができる」という性質がある
ために、暗号復号ともに、全体を並列に処理することが可能である。
そのために、性能が求められるシーンにおいてはCTR モードが用いられ
ることがある。

今回のような実践的な経験がエンジニアのキャリアに繋がると思います。是非サービスを成功させて下さい!