0

我们使用 Perl 的模块 Crypt::CBC 来加密数据。代码看起来像

use Crypt::CBC;
my $cipher = Crypt::CBC->new( -key    => 'herearemykey',
                              -cipher => 'Blowfish'
                            );

my $ciphertext = $cipher->encrypt($password);

但是对于相同的纯文本,我们会得到不同的密文。是否有任何其他方法可以将纯文本结果加密为相同的密文?

4

3 回答 3

1

如果您想要给定的明文使用相同的密文,您还必须将相同的 IV(初始化向量)传递给 CBC - 如下所示:

 my $cipher = Crypt::CBC->new( -key => 'herearemykey',
                               -cipher => 'Blowfish', 
                               -iv => 'randomXY', 
                               -header => 'none' );
于 2012-06-26T15:10:02.470 回答
1

给定相同的纯文本,为什么您希望加密结果保持不变?这样做提供了不需要提供的信息。如果您坚持,您可能会考虑提供一个通用的,如此salt所述。

于 2012-06-26T13:16:21.820 回答
1

这被认为是CBC 模式中密码的一个特性。有一个初始随机IV,然后每个明文块与前一个密文块进行异或。这可以防止在直接的 ECB 模式下可能发生的某些巧妙攻击,其中两个相同的明文块会出现相同的结果。

密文完全相同并不重要。它只需要在另一端正确解密。通常,除非您有特定的理由不这样做,否则请始终使用 CBC 模式。即使您有特定的原因,也可能有比直接、幼稚的 ECB 模式更好的选择。

于 2012-06-26T14:04:10.387 回答