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

Расшифровка XXTEA в Delphi 10.1 Berlin: Проблема с многобайтным кодом в библиотеке LockBox3

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

В данной статье мы рассмотрим проблему, с которой сталкиваются разработчики, использующие библиотеку LockBox3 для шифрования и расшифровки строк с использованием алгоритма XXTEA в среде Delphi 10.1 Berlin. Проблема заключается в возникновении исключения при попытке расшифровки строк, которое указывает на отсутствие соответствия для Unicode символа в целевом многобайтовом кодовом странице.

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

При работе с библиотекой LockBox3 в среде Delphi 10.1 Berlin пользователи столкнулись с проблемой, когда процесс шифрования строк с использованием алгоритма XXTEA проходит успешно, однако при попытке расшифровки возникает исключение. Это связано с некорректной обработкой данных в многобайтовом режиме.

Пример Кода

Вот пример кода, который демонстрирует процесс шифрования и расшифровки строк:

procedure TForm1.btnEncryptClick(Sender: TObject);
var
    PlainText, CipherText: string;
    CryptoLib: TCryptographicLibrary;
    Codec: TCodec;
begin
    CryptoLib := TCryptographicLibrary.Create(nil);
    Codec := TCodec.Create(nil);
    Codec.CryptoLibrary := CryptoLib;
    Codec.StreamCipherId := 'native.XXTEA.Large.Littleend';
    Codec.ChainMode := 'native.CBC';
    Codec.Password := 'password';
    PlainText := Edit1.Text;
    Codec.EncryptString(PlainText, CipherText, TEncoding.UTF8);
    // Дополнительные действия с шифрованным текстом...
end;

procedure TForm1.btnDecryptClick(Sender: TObject);
var
    PlainText, CipherText: string;
    CryptoLib: TCryptographicLibrary;
    Codec: TCodec;
begin
    CryptoLib := TCryptographicLibrary.Create(nil);
    Codec := TCodec.Create(nil);
    Codec.CryptoLibrary := CryptoLib;
    Codec.StreamCipherId := 'native.XXTEA.Large.Littleend';
    Codec.ChainMode := 'native.CBC';
    Codec.Password := 'password';
    CipherText := Edit2.Text;
    Codec.DecryptString(PlainText, CipherText, TEncoding.UTF8);
    // Обработка исключения при расшифровке...
end;

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

Выяснилось, что проблема заключается в двух моментах. Во-первых, в алгоритме расшифровки XXTEA обнаружена ошибка, которую можно исправить, применив кодовую дельта, опубликованную разработчиками. Во-вторых, при настройке кодирования в runtime необходимо использовать другие свойства, отличные от тех, что используются в дизайне-time (например, ChainModeId вместо ChainMode).

Альтернативный Ответ

Для решения проблемы рекомендуется использовать явное кодирование текста в байтовые строки и обратно, а также использовать баз64 или hex для представления шифрованного текста.

Рекомендации

Разработчикам рекомендуется дождаться официального обновления библиотеки LockBox3, которое включит исправление для XXTEA и соответствующие модульные тесты. Также приветствуется помощь в создании Known-Answer-Tests (KATs), которые будут полезны для всех.

Пример Тестовой Программы

В качестве примера прилагается тестовая программа, которая демонстрирует процесс шифрования и расшифровки с использованием алгоритма XXTEA.

program TestLockBox;
{$APPTYPE CONSOLE}
{$R *.res}
uses
    System.SysUtils,
    TPLB3.CryptographicLibrary,
    TPLB3.Codec,
    TPLB3.Random,
    TPLB3.Constants;
var
    sMessage, sCipher, sRecon: string;
const
    CipherId    = XXTEA_Large_ProgId;
    IsBlockMode = False;
    ChainMode   = 'native.CBC';
    Password    = 'password';
    Seed        = 1;
function TForm1_btnEncryptClick(const sPlainText: string): string;
// ... (код функции шифрования)
function TForm1_btnDecryptClick(const sCipherText: string): string;
// ... (код функции расшифровки)
begin
    // ... (тестирование шифрования и расшифровки)
end.

Исправление

Исправление для алгоритма XXTEA заключается в обновлении метода End_Decrypt в классе TXXTEA_LargeBlock_LE_Decryptor, который находится в модуле TPLB3.XXTEA. В будущем обновлении версии 3.8.0 будет включено это исправление и модульные тесты для XXTEA.

procedure TXXTEA_LargeBlock_LE_Decryptor.End_Decrypt;
// ... (код исправления)
end;

Заключение

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

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

Разработчики в Delphi 10.1 Berlin столкнулись с проблемой расшифровки строк в библиотеке LockBox3, связанной с обработкой многобайтного кода и алгоритмом XXTEA.


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

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