2012-06-26 2 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

Почему вы хотите, чтобы зашифрованный результат оставался тем же, что и тот же простой текст? Для этого предоставляется информация, которая не требуется. Если вы настаиваете, вы можете посмотреть на общий salt, как описано here.

1

Это считается особенностью шифров в CBC mode. Начальный случайный IV, а затем каждый блок открытого текста является XOR'd с предыдущим блоком шифрованного текста. Это предотвращает некоторые умные атаки, которые возможны при прямом режиме ЕЦБ, где два одинаковых блока открытого текста будут одинаковыми.

Редко важно, чтобы зашифрованный текст вышел одинаково; его нужно просто дешифровать правильно на другом конце. Как правило, всегда используйте режим CBC, если у вас нет конкретной причины. Даже если у вас есть конкретная причина, вероятно, есть лучшая альтернатива, чем простой, наивный режим ЕЦБ.

1

Если вы хотите же шифротекста для данного открытого текста вы должны пройти также и тот же IV (вектор инициализации) для CBC - как это:

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