laalto が言ったように、Blowfish_PP (_PP だからではなく、Blowfish だから) はブロックに取り組んでいます。
それを扱うのは通常複雑です。そのため、ブロック暗号を提供する Crypt::* モジュールのラッパーであるCrypt::CBCモジュールがあり、より簡単な方法でそれを使用できます。
たとえば、Crypt::CBC を使用したコードは次のようになります。
#!/usr/bin/perl -w
use strict;
use Crypt::CBC;
my $key = "12345678";
my $plaintextBlock = "mystringhere";
my $cipher = Crypt::CBC->new(
-key => $key,
-cipher => 'Blowfish_PP'
);
my $ciphertext = $cipher->encrypt($plaintextBlock);
# my $textual = $ciphertext;
# $textual =~ s/([^a-zA-Z0-9])/sprintf "\\x%02x", ord $1/ge;
# print "ciphertext: [$textual]\n";
print "ciphertext: [$ciphertext]\n";
my $plaintext = $cipher->decrypt($ciphertext);
print "plaintext: [$plaintext]\n";
暗号文はバイトのストリームであるため、実際には印刷できないことに注意してください。コード内の 3 行 (my $textual = $ciphertext で始まる) のハッシュを解除して、暗号文をもう少し読みやすい方法で表示することをお勧めします。
Crypt::CBC を使用するもう 1 つの利点は、別のアルゴリズムに切り替えたい場合に、Crypt::CBC->new() 呼び出しを 1 つ変更するだけで済むことです。
ところで、なぜ Crypt::Blowfish_PP なのですか? つまり、Crypt::フグではないのですか? _PP バージョンは一般的に単純に遅いです。
Crypt::Blowfishからの追加の注記。機能的には Crypt::Blowfish_PP と同等であると想定できます。
このモジュールは Crypt::CBC で使用できます。このモジュールを暗号ブロック連鎖モードに使用する場合は、Crypt::CBC の perldoc を読むことをお勧めします。実際、これまたは他のブロック暗号で 8 バイトを超えるデータを暗号化する意図がある場合は、何らかのブロック連鎖の助けが必要になります。Crypt::CBC はこれが得意な傾向があります。8 バイトを超えて暗号化しない場合、データの長さはちょうど 8 バイトでなければなりません。必要に応じて、独自のパディングを行ってください。null バイトとしての "\0" は、これに使用するのに完全に有効です。