我有一些使用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)。 –