Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2011.05.08;
Скачать: [xml.tar.bz2];

Вниз

Шифрование строки методом XOR.Необходим оптимизированный алгоритм   Найти похожие ветки 

 
bodun   (2009-09-23 19:15) [0]

Есть следующий способ шифрования XOR:
var
 key, text, longkey, result: string;
 i: integer;
 toto, c: char;
begin
 for i := 0 to (length(text) div length(key)) do
   longkey := longkey + key;
 for i := 1 to length(text) do
 begin
   toto := chr((ord(text[i]) xor ord(longkey[i]))); // XOR алгоритм
   result := result + toto;
 end;
end;

Но если приходиться работать с большим объемом данных, longkey в два раза увеличит объем памяти занимаемой программой.
Какую альтернативу можете предложить?


 
Leonid Troyanovsky ©   (2009-09-23 19:31) [1]


> bodun   (23.09.09 19:15)  

> Какую альтернативу можете предложить?

Работать со стримами?
F.e.:
http://groups.google.com/group/fido7.ru.delphi.chainik/msg/b2fb08daf11406ff

--
Regards, LVT.


 
Сергей М. ©   (2009-09-23 19:36) [2]


> Какую альтернативу можете предложить?


Ты тендер что ли объявил ?


 
Leonid Troyanovsky ©   (2009-09-23 19:41) [3]


> Сергей М. ©   (23.09.09 19:36) [2]

> Ты тендер что ли объявил ?

Ну, и обеспечить заявки залогом ;)

--
Regards, LVT.


 
Стенка   (2009-09-23 19:43) [4]

> longkey в два раза увеличит объем памяти занимаемой программой.
> Какую альтернативу можете предложить?

Не использовать longkey


 
Сергей М. ©   (2009-09-23 19:44) [5]


> Leonid Troyanovsky ©   (23.09.09 19:41) [3]
>
>


По 300.
Каждому !


 
Leonid Troyanovsky ©   (2009-09-23 19:51) [6]


> Сергей М. ©   (23.09.09 19:44) [5]

> По 300.
Каждому !

От 2 до 5.

--
Regards, LVT.


 
anonims   (2009-09-23 20:48) [7]

не использовать операции со строками вида
str:=str+s1;


 
Slym ©   (2009-09-24 10:57) [8]

function xor2(const key,text:string):string;
var i,j:integer;
begin
 j:=1;
 SetLength(result,Length(text));
 for i:= 1 to length(text) do
 begin
   result[i]:= chr((ord(text[i]) xor ord(key[j]))); // XOR алгоритм
   inc(j);
   if j>Length(key) then
     j:=1;
 end;
end;


 
Сергей М. ©   (2009-09-24 11:22) [9]

procedure xor2(const key: String, var text:string);
var i,j:integer;
begin
j := Length(key);
for i:= 0 to Prev(Length(text)) do
  text[i]:= chr((ord(text[Succ(i)]) xor ord(key[Succ(i mod j)])));
end;


 
CrytoGen   (2009-09-24 12:36) [10]

procedure xor2(const key: String, var text:string);
var i,p:integer;
l1,l2:integer;
begin
l1 := Length(key);
l2 := Length(text);
while p<Succ(l2) do
begin
for i:= 1 to Min(l1,l2) do
 text[p+i]:= chr((ord(text[p+i]) xor ord(key[i)])));
Inc(p,l1);
end;
end;


 
Slym ©   (2009-09-24 13:00) [11]

[9] и [10]
Вы забыли блоками по integer работать, если уж оптимизацией занялись


 
Омлет   (2009-09-24 13:14) [12]

> Slym ©

А у тебя на каждый символ строки вычисляется Length(key)


 
Сергей М. ©   (2009-09-24 13:33) [13]


> Омлет   (24.09.09 13:14) [12]


Length(key) практически не влияет на сквозную производительность алгоритма.

А вот то что под результат у Slym (C) выделяется отдельная строка - это довольно существенный неоптимизированный момент, ибо автора как раз он и волнует (цитата):


> увеличит объем памяти



> Slym ©   (24.09.09 10:57) [8]


На оч длинных строках - да, есть резон ксорить блоками.


 
Sha ©   (2009-09-24 13:37) [14]

Ща тоже запою, напишите скорей, как я хочу :)


 
Sha ©   (2009-09-24 17:37) [15]

вроде работает

//предупреждение: длина key4 должна быть кратна 4 !!!!!
procedure XorEncode(var s: string; const key4: string);
var
 rest, count, ofs: integer;
 elem, term: pchar;
label
 Done;
begin;
 UniqueString(s);
 integer(elem):=integer(s);
 ofs:=(integer(key4)-integer(s)) shr 2;
 count:=Length(key4) shr 2;
 term:=elem + Length(s);
 if (elem<>term) and (count>0) then begin;
   while true do begin;
     rest:=count;
     repeat;
       pInteger(elem)^:=pInteger(elem)^ xor pIntegerArray(elem)[ofs];
       inc(elem,4);
       if elem>=term then goto Done;
       dec(rest);
       if rest<=0 then break;
       pInteger(elem)^:=pInteger(elem)^ xor pIntegerArray(elem)[ofs];
       inc(elem,4);
       if elem>=term then goto Done;
       dec(rest);
       until rest<=0;
     dec(ofs, count)
     end;
Done:
   term^:=#0;
   end;
 end;

procedure TForm1.Button1Click(Sender: TObject);
const
 key = #1#2;
 key4 = key + key + key + key;
var
 s: string;
begin;
 s:="defghdefghdefgh";
 XorEncode(s, key4);
 ShowMessage(s);
 XorEncode(s, key4);
 ShowMessage(s);
 end;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2011.05.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.003 c
1-1253246214
Seleznew
2009-09-18 07:56
2011.05.08
Иерархоческая сортировка


2-1295949753
Тимоха111
2011-01-25 13:02
2011.05.08
Захват изображения части окна


15-1295611321
>|
2011-01-21 15:02
2011.05.08
Как распознать силует человека на картинке с веб-камеры?


15-1296128732
usrg
2011-01-27 14:45
2011.05.08
Microsoft Visual Studio 2010


2-1296587747
Тимоха111
2011-02-01 22:15
2011.05.08
копировать массив в другой массив





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский