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

Шифрование текста 2

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

Шифрование текста 2


{$I-,R-}

Unit Crypter;

interface
Uses Objects;

procedure EnCrypt(var Pntr: Array of Char; ArrLen: Word; password: string);
{ - Закpиптовать блок }
procedure DeCrypt(var Pntr: Array of Char; ArrLen: Word; password: string);
{ - Раскиптовать блок }

procedure EnCryptStream(var st: tStream; Password: String);
{ - Закpиптовать поток }
procedure DeCryptStream(var st: tStream; Password: String);
{ - Раскиптовать поток }

implementation

procedure EnCrypt(var Pntr: Array of Char; ArrLen:Word; password: string);
var
  len,pcounter: byte;
  x:Word;
begin
  len := length(password) div 2;
  pcounter := 1;
  for x:=0 to ArrLen-1 do begin
    Pntr[x] := chr(ord(password[pcounter]) + ord(Pntr[x]) + len);
    inc(pcounter);
    if pcounter > length(password) then pcounter := 1;
  end;
end;

procedure DeCrypt(var Pntr: Array of Char; ArrLen:Word; password: string);
var
  len,pcounter: byte;
  x:Word;
begin
  len := length(password) div 2;
  pcounter := 1;
  for x:=0 to ArrLen-1 do begin
    Pntr[x] := chr(ord(Pntr[x]) - ord(password[pcounter]) - len);
    inc(pcounter);
    if pcounter > length(password) then pcounter := 1;
  end;
end;

type
 pBuffer = ^tBuffer;
 tBuffer = Array[1..$FFFF] of Char;

procedure EnCryptStream(var st: tStream; Password: String);
 var
  buf: pBuffer;
  StSize, StPos, p: Longint;
 begin
  if (@st=nil) or (Password='') then exit;
  New(buf);
  StPos:=st.GetPos;
  StSize:=st.GetSize;
  st.Reset;
  st.Seek(0);
  repeat
   p:=st.GetPos;
   if SizeOf(Buf^)> St.GetSize-St.GetPosthen st.Read(buf^,St.GetSize-St.GetPos)
else st.Read(buf^,SizeOf(Buf^));
   EnCrypt(buf^,SizeOf(buf^),password);
   st.Reset;
   st.Seek(p);
   st.Write(buf^,SizeOf(Buf^));
  until (St.GetSize=St.GetPos);
  st.Seek(StSize);
  st.Truncate;
  st.Seek(StPos);
  Dispose(buf);
 end;

procedure DeCryptStream(var st: tStream; Password: String);
 var
  buf: pBuffer;
  StSize, StPos, p: Longint;
 begin
  if (@st=nil) or (Password='') then exit;
  New(buf);
  StPos:=st.GetPos;
  StSize:=st.GetSize;
  st.Reset;
  st.Seek(0);
  repeat
   p:=st.GetPos;
   if SizeOf(Buf^)> St.GetSize-St.GetPosthen st.Read(buf^,St.GetSize-St.GetPos)
else st.Read(buf^,SizeOf(Buf^));
   DeCrypt(buf^,SizeOf(buf^),password);
   st.Reset;
   st.Seek(p);
   st.Write(buf^,SizeOf(Buf^));
  until (St.GetSize=St.GetPos);
  st.Seek(StSize);
  st.Truncate;
  st.Seek(StPos);
  Dispose(buf);
 end;

end.

Перевод контента на русский язык:

Программа Delphi, которая реализует алгоритм шифрования и дешифрования с использованием пароля. Основные процедуры:

  1. EnCrypt: Шифрует массив символов (Pntr) с помощью пароля.
  2. DeCrypt: Дешифровывает массив символов (Pntr) с помощью пароля.
  3. EnCryptStream: Шифрует поток (st) с помощью пароля.
  4. DeCryptStream: Дешифровывает поток (st) с помощью пароля.

Алгоритмы шифрования и дешифрования используют простой цифровой шифр, где каждый символ входного текста шифруется/дешифровывается путем добавления/вычитания ASCII-значения соответствующего символа в пароле. Длина пароля используется как ключ для определения смещения операции добавления/вычитания.

Некоторые предложения по улучшению кода:

  1. Обработка ошибок: Добавьте механизмы обработки ошибок, чтобы обрабатывать случаи, когда входной поток или массив является недопустимым, или когда пароль пуст.
  2. Обработка потока: Рассмотрите использование более эффективного способа чтения и записи в поток, например, с помощью буферов или chunking данных.
  3. Хранение пароля: Если планируете хранить зашифрованный текст или пароль, убедитесь, что используете безопасный метод для хранения чувствительных данных,such as hashing and salting.
  4. Безопасность алгоритма: Этот простой цифровой шифр не является безопасным и может быть легко взломан атакующим. Рассмотрите использование более безопасного алгоритма, such as AES (Advanced Encryption Standard), для производственного уровня шифрования.

Альтернативное решение:

Вместо реализации собственного алгоритма шифрования можно использовать компонент Delphi TMemoryStream для шифрования и дешифрования потока. Также можно использовать компонент TSHA1Hash для хеширования пароля и безопасного хранения.

Пример кода:

procedure EnCryptStream(var st: TMemoryStream; Password: String);
var
  Hash: TString;
begin
  if st.Size = 0 then Exit;

  Hash := SHA1Hash(Password);
  st.Position := 0;
  while st.Position < st.Size do
  begin
    st.ReadBuffer(st.Size - st.Position, 1);
    st.Position := 0;
    TSHA1Hash.HashBuffer(st.Buffer[st.Position], st.Size - st.Position, Hash);
    st.Position := 0;
    EnCrypt(st Buffer, st.Size, Hash);
    st.Seek(0);
    st.WriteBuffer(st Buffer, st.Size);
    inc(st.Position);
  end;
end;

procedure DeCryptStream(var st: TMemoryStream; Password: String);
var
  Hash: TString;
begin
  if st.Size = 0 then Exit;

  Hash := SHA1Hash(Password);
  st.Position := 0;
  while st.Position < st.Size do
  begin
    st.ReadBuffer(st.Size - st.Position, 1);
    st.Position := 0;
    TSHA1Hash.HashBuffer(st.Buffer[st.Position], st.Size - st.Position, Hash);
    st.Position := 0;
    DeCrypt(st Buffer, st.Size, Hash);
    st.Seek(0);
    st.WriteBuffer(st Buffer, st.Size);
    inc(st.Position);
  end;
end;

В этом коде используется компонент TSHA1Hash для хеширования пароля и затем шифруется/дешифровывается поток с помощью зашифрованного пароля. Обратите внимание, что это упрощенный пример и может не быть подходящим для производственного уровня шифрования из-за его простоты.

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

Шифрование текста: реализация алгоритмов шифрования и расшифрования текстовых данных в Delphi.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-04-04 02:39:17/0.0059800148010254/0