Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2011, 22:29   #1
Vasisualis
 
Регистрация: 21.06.2011
Сообщений: 8
По умолчанию шифрование данных

У меня есть код кто может пояснить как называется данное шифрование и немного описания.
Код:
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;

Последний раз редактировалось Vasisualis; 21.06.2011 в 23:02.
Vasisualis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифрование данных s-ene Свободное общение 0 12.02.2011 21:36
Шифрование данных MISHAIL Помощь студентам 4 04.02.2011 15:26
Шифрование данных [обсуждение] Lime Свободное общение 25 23.06.2010 15:19
Шифрование данных didar_ Общие вопросы Delphi 2 07.11.2009 12:24
Шифрование данных frayerok Общие вопросы C/C++ 0 20.10.2008 22:35