Perl 使用Crypt::CBC进行数据加密

Perl 使用Crypt::CBC进行数据加密,perl,encryption,Perl,Encryption,我们使用了Perl的模块Crypt::CBC来加密数据。 代码看起来像 use Crypt::CBC; my $cipher = Crypt::CBC->new( -key => 'herearemykey', -cipher => 'Blowfish' ); my $ciphertext = $cipher->encrypt($password);

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

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

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

但是对于同一个纯文本,我们得到了不同的密码文本。是否有其他方法可以在相同的密文中加密纯文本结果?

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

为什么要在相同的纯文本中保持加密结果不变?这样做可以提供不需要提供的信息。如果您坚持,您可能会考虑提供一个通用的
salt

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


密文以相同的方式输出很少重要;它只需要在另一端正确解密。通常,除非您有特殊理由不使用CBC模式,否则请始终使用CBC模式。即使您有特定的原因,也可能有比简单、朴素的ECB模式更好的选择。

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


密文以相同的方式输出很少重要;它只需要在另一端正确解密。通常,除非您有特殊理由不使用CBC模式,否则请始终使用CBC模式。即使您有特定的原因,也可能有比简单、朴素的ECB模式更好的选择。

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

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

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

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

警告,威尔·罗宾逊:如果你不将(随机)IV与加密数据一起存储,你将失去对数据的访问权。预挂起IV是最明显的选择(因为在解密第一个块时您需要它)。警告,will Robinson:如果您不使用加密数据存储(随机)IV,您将失去对数据的访问权限。预挂起IV是最明显的选择(因为在解密第一个块时需要它)。