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

Имплементация AES/CBC в Delphi и его портирование в C#

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

Имплементация AES/CBC в Delphi и его портирование в C

Введение

Алгоритм шифрования AES (Advanced Encryption Standard) является одним из наиболее популярных методов шифрования в современных информационных системах. Режим CBC (Cipher Block Chaining) позволяет обеспечить дополнительную безопасность за счет цепной обработки блоков данных. В данной статье мы рассмотрим, как реализовать AES/CBC в среде Delphi, и как перенести аналогичную функциональность в среду C#.

Реализация AES/CBC в Delphi

Для реализации AES/CBC в Delphi можно использовать компоненты, такие как TAES, TAESKey256 и TAESBuffer, которые предоставляют необходимые функции для работы с алгоритмом. Пример кода, демонстрирующего шифрование данных, выглядит следующим образом:

function StringToHex(S: string): string;
var
  i: integer;
begin
  Result := '';
  for i := 1 to Length(S) do
    Result := Result + IntToHex(Ord(S[i]), 2);
end;

var
  PlainText:     AnsiString;
  AES:           TAES;
  Key:           TAESKey256;  // array[0..31] of byte;
  InitialVector: TAESBuffer;  // array[0..15] of byte;
  InputStream:   TStringStream;
  OutputStream:  TStringStream;
begin
  PlainText := 'test';
  FillChar(Key, SizeOf(Key), 1);
  FillChar(InitialVector, SizeOf(InitialVector), 2);

  AES          := TAES.Create;
  InputStream  := TStringStream.Create(PlainText);
  OutputStream := TStringStream.Create('');

  try
    AES.EncryptAESStreamCBC(InputStream, 0, Key, InitialVector, OutputStream);

    Writeln(StringToHex(OutputStream.DataString));
    Readln;
  finally
    InputStream.Free;
    OutputStream.Free;
    AES.Free;
  end;
end.

Проблема переноса в C

При попытке перенести реализацию AES/CBC в C# с использованием класса AesManaged из пространства имен System.Security.Cryptography пользователь столкнулся с проблемой, что результаты шифрования не совпадают с результатами, полученными в Delphi. Это может быть связано с различными настройками режима и дополнениями, такими как размер блока и режим дополнения.

Решение проблемы

Пользователь обнаружил, что ключевым моментом является установка свойства Padding в PaddingMode.Zeros. Это позволило получить совпадающий результат шифрования в C# с результатами, полученными в Delphi.

public byte[] Encrypt()
{
    using (var algorithm = new AesManaged())
    {
        algorithm.Key = Enumerable.Repeat((byte)0x01, 32).ToArray();
        algorithm.IV = Enumerable.Repeat((byte)0x02, 16).ToArray();
        algorithm.Padding = PaddingMode.Zeros; // Важно!

        using (ICryptoTransform encryptor = algorithm.CreateEncryptor(algorithm.Key, algorithm.IV))
        {
            using (var stream = new MemoryStream())
            {
                using (var cryptoStream = new CryptoStream(stream, encryptor, CryptoStreamMode.Write))
                {
                    using (var writer = new BinaryWriter(cryptoStream))
                    {
                        writer.Write(new byte[] {0x74, 0x65, 0x73, 0x74});
                    }
                    return stream.ToArray();
                }
            }
        }
    }
}

Заключение

Перенос реализации AES/CBC между различными языками программирования и средами разработки требует внимательного учета всех параметров и режимов работы алгоритма. В данном случае, изменение режима дополнения позволило достичь совпадения результатов шифрования в C# с результатами, полученными в Delphi.

Эта статья предоставляет практические советы и примеры кода, которые помогут разработчикам, сталкивающимся с подобными задачами, успешно их решить.

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

Статья посвящена реализации шифрования AES с использованием режима CBC в среде Delphi и последующему переносу аналогичной функциональности в язык программирования C#.


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

Получайте свежие новости и обновления по 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 12:27:36/0.00152587890625/0