2012-06-26 44 views
0

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

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

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

但我们得到了相同的纯文本不同的密文。有没有其他方法用相同的密文对纯文本结果进行加密?

+0

警告,威尔·罗宾逊:如果你不保存(随机)IV与您的加密数据,您将无法访问您的数据。预先申请IV是最明显的选择(因为解密第一个块时需要它)。 –

回答

1

为什么你要加密的结果在给定相同的纯文本时保持不变?为此提供了不需要的信息。如果你坚持,你可以看看如here所述提供一个共同的salt

1

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

密文出来的情况很不重要;它只需要在另一端正确解密。作为一项规则,除非您有特定的理由不要,否则始终使用CBC模式。即使你有一个特定的原因,可能比简单朴素的ECB模式更好。

1

如果你想给定的明文相同的密文,你也必须相同IV(初始化向量)传递给CBC - 是这样的:

my $cipher = Crypt::CBC->new(-key => 'herearemykey', 
           -cipher => 'Blowfish', 
           -iv => 'randomXY', 
           -header => 'none'); 
相关问题