Perl のCrypt::CBCモジュールを使用して暗号化された暗号文があり、それを別の場所で解読したいと考えています。
Crypt::CBC
暗号文は、コンストラクターの「単純な」バージョンを使用して生成されました。つまり、次のとおりです。
use Crypt::CBC;
$cipher = Crypt::CBC->new( -key => 'my secret key',
-cipher => 'Blowfish'
);
MANページを読むと、この構築方法は、単純な文字列キーとランダムソルトを取得して、暗号化に使用するIVおよびリテラルキーを生成し、ソルトを使用してヘッダーを埋め込みます.
"salt" -- パスフレーズを 8 バイトのランダム値と組み合わせて、提供されたパスフレーズからブロック暗号キーと IV の両方を生成します。ソルトはデータ ストリームの先頭に追加され、正しいパスフレーズが与えられた場合、復号化によってキーと IV の両方が再生成されます。この方法は、OpenSSL の現在のバージョンと互換性があります。
ここで、暗号文、リテラル キー、および IV を指定して、CBC 復号化のみをサポートする別のプラットフォームで暗号文を復号化する必要があります。リテラル キー、IV & ソルトを生成するために、Crypt::CBC を使用して次のような値を生成しました。
my $crypt = new Crypt::CBC(-key => 'my secret key', -cipher => 'Blowfish');
my $out = $crypt->decrypt($ciphertext);
my $literal_key = $crypt->key();
my $iv = $crypt->iv();
my $salt = $crypt->salt();
ここでの復号化は正しいですが、生成されたリテラル キー & IV を使用して暗号を復号化できませんでした。これはゴミを生成します:
my $crypt2 = new Crypt::CBC(
-literal_key => 1,
-key => $literal_key,
-cipher => 'Blowfish',
-iv => $iv,
-header => 'none');
my $rubbish - $crypt2->decrypt($ciphertext);
リテラルキーを提供してソルトヘッダーを使用することはできないため、次の動きについて迷っています。
このテキストを解読するにはどうすればよいですか?
編集: ターゲット システムは Perl を実行していませんが、上記の $rubbish と同じ値を生成できたので、同じアルゴリズム (CBC、Blowfish) を使用して解読していると確信しています。