У меня есть какой-то зашифрованный текст, который был зашифрован с помощью модуля Perl Crypt :: CBC , который я хочу расшифровать в другом месте.
Зашифрованный текст был создан с использованием «простой» версии *Конструктор 1005 *, то есть:
use Crypt::CBC;
$cipher = Crypt::CBC->new( -key => 'my secret key',
-cipher => 'Blowfish'
);
При чтении страницы MAN этот метод построения использует простой строковый ключ и случайную соль для генерации IV и литерального ключа, который используется для шифрования, а такжевставьте заголовок с солью.
"соль" - объедините кодовую фразу с 8-байтовым случайным значением, чтобы сгенерировать ключ блочного шифра и IV из предоставленной парольной фразы.Соль будет добавлена в начало потока данных, что позволит дешифрованию восстановить ключ и IV при правильной парольной фразе.Этот метод совместим с текущими версиями OpenSSL.
Теперь мне нужно расшифровать зашифрованный текст на другой платформе, которая поддерживает только дешифрование CBC, учитывая зашифрованный текст, буквальный ключ и IV.Чтобы попытаться сгенерировать литеральный ключ, IV и соль, я использовал Crypt :: 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();
Расшифровка здесь верна, но я не смог использовать сгенерированныйбуквальный ключ и IV для расшифровки шифра;это производит мусор:
my $crypt2 = new Crypt::CBC(
-literal_key => 1,
-key => $literal_key,
-cipher => 'Blowfish',
-iv => $iv,
-header => 'none');
my $rubbish - $crypt2->decrypt($ciphertext);
Я не могу предоставить буквальный ключ и использовать соленый заголовок, поэтому я потерян в следующем шаге.
Как я могу расшифровать этот текст?
EDIT : целевая система не работает на Perl, но мне удалось сгенерировать то же значение, что и в $ rubbish выше, поэтому я уверен, что он использует тот же алгоритм (CBC, Blowfish) для расшифровки.