Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проблемы и решения при переносе Blowfish Ciphertext Stealing из Delphi в Bouncy Castle: сравнение с CBC

Delphi , Синтаксис , Шифрование

Вопрос пользователя связан с трудностями при переносе алгоритма шифрования Blowfish в режиме Ciphertext Stealing (CTS) из Delphi в библиотеку Bouncy Castle. Пользователь столкнулся с проблемой, что результаты шифрования не совпадают с ожидаемыми, несмотря на использование одинаковых ключей и векторов инициализации.

Описание проблемы

Исходный код в Delphi использует компонент TCipher_Blowfish с режимом cmCTS. При этом ключ шифрования предварительно обрабатывается с помощью алгоритма RipeMD256. Пользователь столкнулся с проблемой, что входной массив байтов должен быть размером, равным размеру блока шифрования, что, по его мнению, не должно быть обязательным требованием для режима CTS.

Контекст и решение проблемы

В контексте данной статьи важно понимать, что режим CTS позволяет обрабатывать сообщения, которые не делятся нацело на размер блока, без увеличения размера зашифрованного текста. Однако, важно отметить, что реализация CTS в Delphi и Bouncy Castle может отличаться, что и вызывает проблемы при переносе.

Пользователь также проверил альтернативную библиотеку Blowfish.cs, которая использует режим CBC и дает одинаковый результат с исходным кодом на Delphi. Это указывает на то, что проблема может быть связана с особенностями реализации CTS в Bouncy Castle.

Подтвержденный ответ

Пользователь предполагал, что результаты шифрования в режимах CTS и CBC должны совпадать при входных данных размером в 8 байт. Это предположение неверно, так как алгоритм CTS вносит изменения в результат шифрования, даже для входных данных, размер которых равен размеру блока.

Пример кода на Object Pascal (Delphi)

var
  IV: Array [0..7] of Byte;
  Key: String = '12345678';
with TCipher_Blowfish.Create('', nil) do
begin
  try
    InitKey(Key, @IV); // Инициализация ключа, с предварительной обработкой ключа алгоритмом RipeMD256
    Result := CodeString('12345678', paEncode, -1); // Шифрование данных
  finally
    Free;
  end;
end;

Пример кода на C# (Bouncy Castle)

IBufferedCipher inCipher = CipherUtilities.GetCipher("BLOWFISH/CTS");
var hashOfPrivateKey = HashValue(Encoding.ASCII.GetBytes("12345678"));
var key = new KeyParameter(hashOfPrivateKey);
var IV = new byte[8] { 1, 2, 3, 4, 5, 6, 7, 8 };
var cipherParams = new ParametersWithIV(key, IV);
inCipher.Init(true, cipherParams);
var input = Encoding.ASCII.GetBytes("12345678");
var output = inCipher.DoFinal(input);

Обсуждение и выводы

Исходя из предоставленной информации, пользователю необходимо понимать различия в реализации режима CTS между Delphi и Bouncy Castle. В частности, в исходном коде Delphi используется нестандартная реализация, которая включает двойное XOR-обработку данных. Это приводит к различиям в результатах шифрования, которые не совместимы с Bouncy Castle.

Для поддержания обратной совместимости и обеспечения возможности шифрования данных, совместимых с исходным Delphi-приложением, пользователю возможно придется использовать исходный код Delphi для шифрования. В противном случае, если обратная совместимость не требуется, можно использовать стандартную реализацию Bouncy Castle.

Заключение

При переносе алгоритма шифрования Blowfish в режиме Ciphertext Stealing из Delphi в Bouncy Castle важно учитывать различия в реализации режимов шифрования. Для обеспечения корректности и совместимости результатов шифрования необходимо тщательно изучить особенности каждой реализации и, при необходимости, адаптировать код под конкретные требования проекта.

Создано по материалам из источника по ссылке.

Проблема заключается в несоответствии результатов шифрования алгоритмом Blowfish в режиме Ciphertext Stealing (CTS) при переносе кода из среды Delphi в библиотеку Bouncy Castle, несмотря на использование одинаковых ключей и векторов инициализации, что мо


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Шифрование ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-14 10:41:52/0.0036189556121826/0