我有一些使用Perl的Crypt::CBC模塊加密的密文,我希望在其他地方解密。如何使用鹹頭解密Blowfish密文?
生成密文使用Crypt::CBC
構造的「簡單」的版本,那就是:
use Crypt::CBC;
$cipher = Crypt::CBC->new(-key => 'my secret key',
-cipher => 'Blowfish'
);
從閱讀手冊頁,這種施工方法將採取簡單的字符串鍵和隨機鹽生成一個IV &文字鍵用於加密,以及嵌入一個標題與鹽。
「鹽」 - 結合 一個8字節隨機值,以生成 兩個塊密碼密鑰和由 提供密碼短語的IV密碼。鹽將被附加到數據流的開頭 ,允許解密到 在給定正確密碼的情況下重新生成密鑰和IV。 此方法與當前版本的OpenSSL兼容。
我現在需要解密上僅支持CBC解密給出的密文,一個文本鍵值& IV另一個平臺的密文。以嘗試產生文本鍵值,IV &鹽,我用地穴:: 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();
這裏的解密是正確的,但我一直無法使用生成的文本鍵值四,解密密碼;這產生垃圾:
my $crypt2 = new Crypt::CBC(
-literal_key => 1,
-key => $literal_key,
-cipher => 'Blowfish',
-iv => $iv,
-header => 'none');
my $rubbish - $crypt2->decrypt($ciphertext);
我不能提供一個文字鍵和使用鹽頭,所以我迷失在下一步。
如何解密此文本?
編輯:目標系統未運行的Perl,但我已經能夠產生相同的值作爲上述$垃圾,所以我敢肯定,它使用相同的算法(CBC,河豚)破譯。
現貨!謝謝一堆。 –
作爲一個額外的注意事項,以防其他搜索者在同一條船上,我有幾個不連貫的文本解密,所有加密都使用相同的密碼,所以必須從鹽中計算出IV和密鑰。我將代碼直接移出Crypt :: CBC中的_salted_key_and_iv函數(http://cpansearch.perl.org/src/LDS/Crypt-CBC-2.30/CBC.pm)。 –