Форум: "Основная";
Текущий архив: 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.004 c