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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 22.01.2008, 13:15   #1
Paul Hindenburg
Форумчанин
 
Аватар для Paul Hindenburg
 
Регистрация: 27.07.2007
Сообщений: 123
Радость Шифрование методом сдвига

у меня есть модуль для шиврования, посмотрите может чтото нужно изменить? а то иногда случаются ошибки)))
Ну что ж… Жизнь иногда такие фертеля выкидывает, что и фантасту не приснится…
Paul Hindenburg вне форума
Старый 22.01.2008, 13:17   #2
Paul Hindenburg
Форумчанин
 
Аватар для Paul Hindenburg
 
Регистрация: 27.07.2007
Сообщений: 123
По умолчанию Вот модуль

Код:
unit Schifre;

interface

uses
  SysUtils;
function  UdalenieProbelow(Stroka:string):string;
procedure GanzenKod(kod:string;LenText:integer;var arr:array of integer);
procedure BildenStrokaKod(stroka: string;Var a : array of integer);
procedure keygen(s : string; var key : integer);
function schifrovka(stroka:string;key:string):string;
function Deschifrovka(stroka:string;key:string): string ;

implementation

uses Unit1;

function UdalenieProbelow(Stroka:string):string;
{DONE 1 -oAndrew -cобработка текста:
удалить все пробелы из строки}
var
  strIshodnnaja,  strBezProbela  :string;
  LengthStr:integer;
  LimStr : integer;
  Index:integer;
  KolvoProbel:integer;
begin
try
LimStr := Length(Stroka);
strIshodnnaja := Stroka;
KolvoProbel := 0;
Index := 0;
for LengthStr := 0 to LimStr do
begin
  if strIshodnnaja[LengthStr]=' '
    then inc(KolvoProbel);
end;
strBezProbela := strIshodnnaja;
SetLength(strBezProbela,LimStr-KolvoProbel);
for LengthStr := 0 to LimStr do
begin
  if strIshodnnaja[LengthStr]<>' '
    then begin
    strBezProbela[Index]:=strIshodnnaja[LengthStr];
    Inc(Index);
    end;
end;
Result := strBezProbela;
except
end;
end;//UdalenieProbelow

procedure BildenStrokaKod(stroka: string;Var a : array of integer);
{DONE 1 -oAndrew -cобработка текста:
преобразовать текст в коды символов}
var
  newstroka:string;
  MasText:integer;
  simbol:char;
  indexConst:Byte;
begin
newstroka := stroka;//UdalenieProbelow(stroka);
//newstroka := stroka;
for MasText := 1 to length(newstroka) do
begin
  simbol := newstroka[MasText];
  for indexConst := 1 to length(Arr_Bukwa)-1 do
  begin
    if Arr_Bukwa[indexConst] = simbol then
    a[MasText-1] := indexConst;
  end;
end;
  a := a;
end;//BildenStrokaKod

procedure GanzenKod(kod:string;LenText:integer;
                    var arr:array of integer);
{DONE 1 -oAndrew -cобработка текста:
возвращает массив длинной LenText из символов kod}
var
  textkod : string;
  indexStroka,indexPodstroka : integer;
begin
textkod := Kod;
indexPodstroka := 1;
  for indexStroka := 0 to Length(arr)-1 do
  begin
    arr[indexStroka] := strtoint((textkod[indexPodstroka]));
    inc(indexPodstroka);
    if indexPodstroka = Length(textkod)+1 then indexPodstroka:=1;
  end;
end;//GanzenKod

procedure keygen(s : string; var key : integer);
var
  MassivKodovSimvovol :array of integer;
begin
SetLength(MassivKodovSimvovol,length(s));
BildenStrokaKod(s,MassivKodovSimvovol);
key:= MassivKodovSimvovol[0]+MassivKodovSimvovol[length(s)-1] div 2 ;
end;


function schifrovka(stroka:string;key:string):string;
var
//1
  MassivKodovSimvovol,
  MassivKodovSdviga: array of integer;
  index:integer;
  strBezProbelov:string;
//2
  lenText:integer;
//3
  MasSumma: array of integer;
  sl1,sl2,sum:Integer;
  kodItog:integer;
  text2:string;
//  TT:integer;
begin
result := '';
//1
strBezProbelov := stroka;//UdalenieProbelow(Text.Text);
SetLength(MassivKodovSimvovol,length(strBezProbelov));
BildenStrokaKod(stroka,MassivKodovSimvovol);
//2
lenText := length(strBezProbelov);
SetLength(MassivKodovSdviga,lenText);
GanzenKod(Key,lenText,MassivKodovSdviga);
//3
text2 := '';

SetLength(MasSumma,lenText);
for index := 0 to lenText-1 do
begin
//*******  Ш И Ф Р О В К А **********
    sl1 := MassivKodovSimvovol[index];
    sl2 := MassivKodovSdviga[index];
    sum := sl1+sl2;
      if sum >= length(Arr_Bukwa)
        then kodItog := sum-length(Arr_Bukwa)
          else kodItog :=   sum;
text2 := text2 + Arr_Bukwa[kodItog];
end;
result := text2
end;

function Deschifrovka(stroka:string;key:string): string ;
var
//1
  MassivKodovSimvovol,
  MassivKodovSdviga: array of integer;
  index:integer;
  strBezProbelov:string;
//2
  lenText:integer;
//3
  MasSumma: array of integer;
  sl1,sl2,sum:Integer;
  kodItog:integer;
  text2:string;
begin
//1
strBezProbelov := stroka;
SetLength(MassivKodovSimvovol,length(strBezProbelov));
BildenStrokaKod(stroka,MassivKodovSimvovol);
//2
lenText := length(strBezProbelov);
SetLength(MassivKodovSdviga,lenText);
GanzenKod(Key,lenText,MassivKodovSdviga);
//3
text2 := '';
SetLength(MasSumma,lenText);
for index := 0 to lenText-1 do
begin
    sl1 := MassivKodovSimvovol[index];
    sl2 := MassivKodovSdviga[index];
    sum := sl1-sl2;
      if sum <= -1
        then kodItog := sum+length(Arr_Bukwa)
          else kodItog :=   sum ;
 ////////////////////////////
MasSumma[index] := kodItog;
text2 := text2 + Arr_Bukwa[kodItog];
end;
result := text2
end;


end.
Ну что ж… Жизнь иногда такие фертеля выкидывает, что и фантасту не приснится…
Paul Hindenburg вне форума
Старый 22.01.2008, 16:01   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что ROL-шифрование уже немодно?
I'm learning to live...
Stilet вне форума
Старый 23.01.2008, 04:36   #4
Paul Hindenburg
Форумчанин
 
Аватар для Paul Hindenburg
 
Регистрация: 27.07.2007
Сообщений: 123
Радость

Цитата:
Сообщение от Stilet Посмотреть сообщение
А что ROL-шифрование уже немодно?
ROL-шифрование? Я четно говоря даже не слышал о таком - можно ссылку - как реализовать на Delphi.
Ну что ж… Жизнь иногда такие фертеля выкидывает, что и фантасту не приснится…
Paul Hindenburg вне форума
Старый 23.01.2008, 08:18   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да че тут сложного,то?

Код:
uses           IdGlobal,
...
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;c:char;
begin
s:='12345678'; caption:=s;
// Шифруем
//********* FOR ******************
for i :=1  to length(s)  do
begin
 s[i]:=char(ROL(byte(s[i]),2));
end;
caption:=caption+' '+s;
//******* END FOR ****************{}
// Расшифровываем
//********* FOR ******************
for i :=1  to length(s)  do
begin
 s[i]:=char(ROR(byte(s[i]),2));
end;
caption:=caption+' '+s;
//******* END FOR ****************{}
end;
Яконечно мог недопонять задачи, просто для шифрования чет код сложноват. Даже MD5 не так сложен как твой пример
I'm learning to live...
Stilet вне форума
Старый 24.01.2008, 08:30   #6
Paul Hindenburg
Форумчанин
 
Аватар для Paul Hindenburg
 
Регистрация: 27.07.2007
Сообщений: 123
Радость

вот нашел исходник для шифрования текста - он мне больше понравился чем мой метод шифровки)

Код:
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.
Ну что ж… Жизнь иногда такие фертеля выкидывает, что и фантасту не приснится…
Paul Hindenburg вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифрование методом гаммирования student_63 Безопасность, Шифрование 9 28.04.2012 17:36
Шифрование методом замещения Skytis Помощь студентам 3 25.05.2008 10:24
Шифрование Stanislav Общие вопросы Delphi 2 15.11.2007 21:56
Операция сдвига? SkyDreamer Общие вопросы C/C++ 3 10.10.2007 08:20