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

Зашифровать и расшифровать строку

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

Зашифровать и расшифровать строку


unit uEncrypt; 

interface 

function Decrypt(const S: AnsiString; Key: Word): AnsiString; 
function Encrypt(const S: AnsiString; Key: Word): AnsiString; 

implementation 

const 
  C1 = 52845; 
  C2 = 22719; 

function Decode(const S: AnsiString): AnsiString; 
const 
  Map: array[Char] of Byte = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 52, 53, 
    54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
    3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 
    20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30, 
    31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 
    46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0); 
var 
  I: LongInt; 
begin 
  case Length(S) of 
    2: 
      begin 
        I := Map[S[1]] + (Map[S[2]] shl 6); 
        SetLength(Result, 1); 
        Move(I, Result[1], Length(Result)) 
      end; 
    3: 
      begin 
        I := Map[S[1]] + (Map[S[2]] shl 6) + (Map[S[3]] shl 12); 
        SetLength(Result, 2); 
        Move(I, Result[1], Length(Result)) 
      end; 
    4: 
      begin 
        I := Map[S[1]] + (Map[S[2]] shl 6) + (Map[S[3]] shl 12) + 
          (Map[S[4]] shl 18); 
        SetLength(Result, 3); 
        Move(I, Result[1], Length(Result)) 
      end 
  end 
end; 

function PreProcess(const S: AnsiString): AnsiString; 
var 
  SS: AnsiString; 
begin 
  SS := S; 
  Result := ''; 
  while SS <> '' do 
  begin 
    Result := Result + Decode(Copy(SS, 1, 4)); 
    Delete(SS, 1, 4) 
  end 
end; 

function InternalDecrypt(const S: AnsiString; Key: Word): AnsiString; 
var 
  I: Word; 
  Seed: Word; 
begin 
  Result := S; 
  Seed := Key; 
  for I := 1 to Length(Result) do 
  begin 
    Result[I] := Char(Byte(Result[I]) xor (Seed shr 8)); 
    Seed := (Byte(S[I]) + Seed) * Word(C1) + Word(C2) 
  end 
end; 

function Decrypt(const S: AnsiString; Key: Word): AnsiString; 
begin 
  Result := InternalDecrypt(PreProcess(S), Key) 
end; 

function Encode(const S: AnsiString): AnsiString; 
const 
  Map: array[0..63] of Char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 
    'abcdefghijklmnopqrstuvwxyz0123456789+/'; 
var 
  I: LongInt; 
begin 
  I := 0; 
  Move(S[1], I, Length(S)); 
  case Length(S) of 
    1: 
      Result := Map[I mod 64] + Map[(I shr 6) mod 64]; 
    2: 
      Result := Map[I mod 64] + Map[(I shr 6) mod 64] + 
        Map[(I shr 12) mod 64]; 
    3: 
      Result := Map[I mod 64] + Map[(I shr 6) mod 64] + 
        Map[(I shr 12) mod 64] + Map[(I shr 18) mod 64] 
  end 
end; 

function PostProcess(const S: AnsiString): AnsiString; 
var 
  SS: AnsiString; 
begin 
  SS := S; 
  Result := ''; 
  while SS <> '' do 
  begin 
    Result := Result + Encode(Copy(SS, 1, 3)); 
    Delete(SS, 1, 3) 
  end 
end; 

function InternalEncrypt(const S: AnsiString; Key: Word): AnsiString; 
var 
  I: Word; 
  Seed: Word; 
begin 
  Result := S; 
  Seed := Key; 
  for I := 1 to Length(Result) do 
  begin 
    Result[I] := Char(Byte(Result[I]) xor (Seed shr 8)); 
    Seed := (Byte(Result[I]) + Seed) * Word(C1) + Word(C2) 
  end 
end; 

function Encrypt(const S: AnsiString; Key: Word): AnsiString; 
begin 
  Result := PostProcess(InternalEncrypt(S, Key)) 
end; 

end. 

{**************************************************************} 
// Example: 
{**************************************************************} 

procedure TForm1.Button1Click(Sender: TObject); 
const 
 my_key = 33189; 
var 
  sEncrypted, sDecrypted :AnsiString; 
begin 
  // Encrypt a string 
  sEncrypted := Encrypt('this is a sample text 
    to encrypt...abcd 123 {}[]?=)=(',my_key); 
  // Show encrypted string 
  ShowMessage(sEncrypted); 
  // Decrypt the string 
  sDecrypted := Decrypt(sEncrypted,my_key); 
   // Show decrypted string 
  ShowMessage(sDecrypted); 
end;

Программа на Delphi, которая обеспечивает функциональность шифрования и дешифрования с использованием двух алгоритмов: Цезарев шифр (для кодирования/декодирования) и Виженера шифр (для шифрования/дешифрования). Вот подробное описание кода:

Модуль uEncrypt

Модуль определяет несколько функций для шифрования, дешифрования и предобработки строк.

  1. Decode: Функция используется для декодирования строки, маппирование каждого символа к его соответствующему десятичному значению.
  2. PreProcess: Функция предобрабатывает входную строку, используя функцию Decode для декодирования.
  3. InternalDecrypt: Функция выполняет фактическое дешифрование с использованием алгоритма Виженера шифра.
  4. Decrypt: Это обёртка функции, которая вызывает InternalDecrypt с предобработанной входной строкой и ключом.
  5. Encode: Функция используется для кодирования строки, маппирование каждого десятичного значения обратно к соответствующему символу.
  6. PostProcess: Функция предобрабатывает выходную строку, используя функцию Encode для кодирования.
  7. InternalEncrypt: Функция выполняет фактическое шифрование с использованием алгоритма Виженера шифра.
  8. Encrypt: Это обёртка функции, которая вызывает InternalEncrypt с предобработанной входной строкой и ключом.

Пример процедуры

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

Замечания

  • Алгоритм Цезарев шифр используется для кодирования/декодирования, заменяя каждый символ на другой символ на фиксированное количество позиций вниз по алфавиту.
  • Алгоритм Виженера шифр используется для шифрования/дешифрования, используя ключевое слово (в этом случае my_key) для определения сдвига для каждого символа в входной строке.

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

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


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

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




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


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


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:20:08/0.0038809776306152/0