const
csCryptFirst = 20;
csCryptSecond = 230;
csCryptHeader = 'Crypted';
type
ECryptError = class(Exception);
function CryptString(Str:String):String;
var i,clen : Integer;
begin
clen := Length(csCryptHeader);
SetLength(Result, Length(Str)+clen);
Move(csCryptHeader[1], Result[1], clen);
For i := 1 to Length(Str) dobeginif i mod 2 = 0 then
Result[i+clen] := Chr(Ord(Str[i]) xor csCryptFirst)
else
Result[i+clen] := Chr(Ord(Str[i]) xor csCryptSecond);
end;
end;
function UnCryptString(Str:String):String;
var i, clen : Integer;
begin
clen := Length(csCryptHeader);
SetLength(Result, Length(Str)-clen);
if Copy(Str, 1, clen) < > csCryptHeader thenraise ECryptError.Create('UnCryptString failed');
For i := 1 to Length(Str)-clen dobeginif (i) mod 2 = 0 then
Result[i] := Chr(Ord(Str[i+clen]) xor csCryptFirst)
else
Result[i] := Chr(Ord(Str[i+clen]) xor csCryptSecond);
end;
end;
Программный код на языке Delphi, демонстрирующий простую шифровку и расшифровку текста с помощью операции XOR.
Функция шифрования: CryptString
Функция CryptString принимает строку в качестве входных данных, шифрует ее, заменяя каждый символ соответствующим символом из исходной строки, но с учетом позиции символа. Offset для каждого символа определяется значениями csCryptFirst и csCryptSecond, равными 20 и 230 соответственно.
Данная функция выполняет следующие действия:
Устанавливает длину результата в виде длины входной строки, плюс длина заголовка шифрования (csCryptHeader).
Копирует заголовок шифрования в начало результата.
Итерируется по каждому символу в входной строке:
Если индекс четный (т.е., i mod 2 = 0), заменяет символ на результат XOR между оригинальным символом и csCryptFirst.
Если индекс нечетный, заменяет символ на результат XOR между оригинальным символом и csCryptSecond.
Функция расшифровки: UnCryptString
Функция UnCryptString принимает зашифрованную строку в качестве входных данных, расшифровывает ее, обратно выполняя процесс шифрования. Проверяет, если первый участок строки соответствует заголовку шифрования, и если нет, бросает пользовательский исключение ECryptError.
Данная функция выполняет следующие действия:
Устанавливает длину результата в виде длины входной строки, минус длина заголовка шифрования.
Если первый участок входной строки не соответствует заголовку шифрования, бросает исключение.
Итерируется по каждому символу в зашифрованной строке:
Если индекс четный (т.е., i mod 2 = 0), заменяет символ на результат XOR между оригинальным символом и csCryptFirst.
Если индекс нечетный, заменяет символ на результат XOR между оригинальным символом и csCryptSecond.
Замечания
Код использует простую технику шифрования XOR, которая не рекомендуется для безопасной передачи данных из-за ее легко расшифровываемости. В практике вам нужно использовать болееadvanced алгоритмы шифрования, такие как AES или RSA.
Код также предполагает, что входная строка содержит только ASCII-символы (0-127). Если вам нужно поддерживать символы Unicode, вам придется модифицировать код соответствующим образом.
В целом, это хороший пример реализации простой шифровки и расшифровки в Delphi.
В статье описана реализация алгоритма шифрования текста с использованием XOR-операции и фиксированных ключей, а также приведен пример кода на языке Pascal для шифрования и дешифрования текста.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.