AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

2 Prozeduren zu langsam

Ein Thema von maximus Caesar · begonnen am 21. Nov 2005 · letzter Beitrag vom 22. Nov 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von maximus Caesar
maximus Caesar

Registriert seit: 26. Sep 2004
Ort: Biberach
319 Beiträge
 
Turbo Delphi für Win32
 
#1

2 Prozeduren zu langsam

  Alt 21. Nov 2005, 18:56
Hallo!
Ich habe jetzt zwei Prozeduren geschrieben, die mir aber noch zu langsam sind. Ich bekomme Sie nicht schneller hin.
Kennt jemand ne Möglichkeit, dass diese Prozeduren schneller werden?

Prozedur 1:
Delphi-Quellcode:
function TVerschluesselung.Verschluesseln(passwort:String;Text:String):String;
var passwortverschluesselt,schluessel,block1,block2,text2,zeichen,zeichen2:String;
    index,i,i2,i3,i4,i5:Integer;

begin
  //ersten Schlüssel erzeugen
  passwortverschluesselt:=MD5Print(MD5String(Passwort));
  passwortverschluesselt:=MD5Print(MD5String(passwort+passwortverschluesselt+passwort));
  schluessel:=passwortverschluesselt;
  //erster Schlüssel erzeugt

  block1:='';
  block2:='';
  i5:=length(Text);
  text2:=text;
  index:=-1; //BlockIndex

  //verschlüsseln
  repeat
    index:=index+1;
    //Block ausschneiden
    if index<>0 then delete(text2,1,32);
    block1:=text2;
    delete(block1,33,length(block1));
    //Block verschlüsseln
    for i:=1 to length(Block1) do begin
      Zeichen:=Block1[i];

      Zeichen2:=Schluessel[i];
      i2:=ord(Zeichen2[1]);

      i4:=ord(Zeichen[1]);
      i3:=i4+i2;
   // if i3>255 then i3:=i3-255;
      Block2:=Block2+char(i3);
    end;
    //Neuer Schlüssel
    schluessel:=MD5Print(MD5String(Block1+schluessel+Block1));
  until index>=i5/32;
  result:=String(Block2);
end;
Prozedur 2:
Delphi-Quellcode:
function TVerschluesselung.Entschluesseln(passwort:String;Text:String):String;
var passwortverschluesselt,schluessel,block1,block2,block3,text2,zeichen,zeichen2:String;
    index,i,i2,i3,i4,i5:Integer;
begin
  //ersten Schlüssel erzeugen
  passwortverschluesselt:=MD5Print(MD5String(Passwort));
  passwortverschluesselt:=MD5Print(MD5String(passwort+passwortverschluesselt+passwort));
  schluessel:=passwortverschluesselt;
  //erster Schlüssel erzeugt

  block1:='';
  block2:='';
  i5:=length(Text);
  text2:=text;
  index:=-1; //BlockIndex


  //entschlüsseln
  repeat
    index:=index+1;
    //Block ausschneiden
    if index<>0 then delete(text2,1,32);
    block1:=text2;
    delete(block1,33,length(block1));
    //Block entschlüsseln
    for i:=1 to length(Block1) do begin
      Zeichen:=Block1[i];

      Zeichen2:=Schluessel[i];
      i2:=ord(Zeichen2[1]);

      i4:=ord(Zeichen[1]);
      i3:=i4-i2;
   // if i3<0 then i3:=i3+255;
      Block2:=Block2+char(i3);
    end;
    //Neuer Schlüssel
    Block3:=Block2;
    delete(Block3,1,index*32);
    delete(Block3,33,length(Block3));
    schluessel:=MD5Print(MD5String(Block3+schluessel+Block3));
  until index>=i5/32;
  result:=String(Block2);
end;
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: 2 Prozeduren zu langsam

  Alt 21. Nov 2005, 19:56
hm, du könntest die i5/32 einmal ausrechnen und dann direkt mit dem Ergebnis vergleichen. wird aber net viel bringen denk ich. Es ist aber unnötig sie bei jedem Durchgang neu zu rechnen, da du i5 nicht änderst in der Procedur.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#3

Re: 2 Prozeduren zu langsam

  Alt 21. Nov 2005, 20:22
Die Division einmalig auszurechnen bringt auch imo nicht viel. Soweit ich das sehe liegt die Schnecke einfach im Algorithmus begraben.
Nachdem du in beiden Prozeduren rekursive for-schleifen hast dürfte die Komplexität bei ca. n² liegen, was sich bei längeren Werten/häufigeren Schleifendurchläufen schon mal stark auf die Geschwindigkeit auswirkt.
Ergo: Du kannst die Prozeduren beschleunigen, indem du den Algorithmus schon auf den Papier optimierst

(btw: es wäre logischer, die repeat-until-schleifen durch for-schleifen zu ersetzen. Logisch dann nicht i5 / 32 sondern i5 div 32 oder i5 shr 5 nehmen )


greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: 2 Prozeduren zu langsam

  Alt 21. Nov 2005, 20:59
Ich hab die eine Funktion mal etwas umgeschrieben, vielleicht probierst ja mal und sagst mir den Zeitunterschied.

Delphi-Quellcode:
function TVerschluesselung.Verschluesseln(passwort: string; Text: string): string;
var
  passwortverschluesselt, schluessel, block1, block2: string;
  text2: string;
  index, i, i2, i3, i4, i5: Integer;
begin
  //ersten Schlüssel erzeugen
  passwortverschluesselt := MD5Print(MD5String(Passwort));
  passwortverschluesselt := MD5Print(MD5String(passwort + passwortverschluesselt
    + passwort));
  schluessel := passwortverschluesselt;
  //erster Schlüssel erzeugt

  block1 := '';
  block2 := '';
  i5 := length(Text) div 32;
  text2 := text;
  index := 0; //BlockIndex

  //verschlüsseln
  repeat
    block1 := copy(text2, index * 32 + 1, 32);

    //Block verschlüsseln
    for i := 1 to length(Block1) do
    begin
      i2 := ord(Schluessel[i]);
      i4 := ord(Block1[i]);
      i3 := i4 + i2;
      Block2 := Block2 + char(i3);
    end;
    index := index + 1;
    //Neuer Schlüssel
    schluessel := MD5Print(MD5String(Block1 + schluessel + Block1));
  until index >= i5;
  result := Block2;
end;
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Benutzerbild von maximus Caesar
maximus Caesar

Registriert seit: 26. Sep 2004
Ort: Biberach
319 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: 2 Prozeduren zu langsam

  Alt 21. Nov 2005, 21:29
Spitze!
Benötigt nur noch 2/25 der Zeit!

Das einzige was an der Prozedure noch nicht passt ist, wenn der Text eine Länge hat, die nicht genau durch 32 Teilbar ist, also mit Rest, werden die Restlichen ZEichen nicht verschlüsselt. Aber das dürfte kein PRoblem sein, dass kann ich ja hinten Anhängen. Kannst du noch die zweite Prozedure anpassen?
Danke!

Die Angepasste Verschlüsselungs Prozedur sieht jetzt so aus:
Delphi-Quellcode:
function TVerschluesselung.Verschluesseln(passwort: string; Text: string): string;
var
  passwortverschluesselt, schluessel, block1, block2: string;
  text2: string;
  index, i, i2, i3, i4, i5: Integer;
begin
  //ersten Schlüssel erzeugen
  passwortverschluesselt := MD5Print(MD5String(Passwort));
  passwortverschluesselt := MD5Print(MD5String(passwort + passwortverschluesselt
    + passwort));
  schluessel := passwortverschluesselt;
  //erster Schlüssel erzeugt

  block1 := '';
  block2 := '';
  i5 := length(Text) div 32;
  text2 := text;
  index := 0; //BlockIndex

  //verschlüsseln
  repeat
    block1 := copy(text2, index * 32 + 1, 32);

    //Block verschlüsseln
    for i := 1 to length(Block1) do
    begin
      i2 := ord(Schluessel[i]);
      i4 := ord(Block1[i]);
      i3 := i4 + i2;
      Block2 := Block2 + char(i3);
    end;
    index := index + 1;
    //Neuer Schlüssel
    schluessel := MD5Print(MD5String(Block1 + schluessel + Block1));
  until index >= i5;
  if length(Text)/32 > i5 then begin
    block1 := copy(text2, index * 32 + 1, 32);
    for i := 1 to length(Block1) do
    begin
      i2 := ord(Schluessel[i]);
      i4 := ord(Block1[i]);
      i3 := i4 + i2;
      Block2 := Block2 + char(i3);
    end;
  end;
  result := Block2;
end;
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: 2 Prozeduren zu langsam

  Alt 21. Nov 2005, 21:55
ich denke du brauchst nichts anhängen sondern einfach nur die Bedingung der repeat ... until schleife ändern

Delphi-Quellcode:
function TVerschluesselung.Verschluesseln(passwort: string; Text: string): string;
var
  passwortverschluesselt, schluessel, block1, block2: string;
  text2: string;
  index, i, i2, i3, i4, i5: Integer;
begin
  //ersten Schlüssel erzeugen
  passwortverschluesselt := MD5Print(MD5String(Passwort));
  passwortverschluesselt := MD5Print(MD5String(passwort + passwortverschluesselt
    + passwort));
  schluessel := passwortverschluesselt;
  //erster Schlüssel erzeugt

  block1 := '';
  block2 := '';
  i5 := length(Text) div 32;
  text2 := text;
  index := 0; //BlockIndex

  //verschlüsseln
  repeat
    block1 := copy(text2, index * 32 + 1, 32);

    //Block verschlüsseln
    for i := 1 to length(Block1) do
    begin
      i2 := ord(Schluessel[i]);
      i4 := ord(Block1[i]);
      i3 := i4 + i2;
      Block2 := Block2 + char(i3);
    end;
    index := index + 1;
    //Neuer Schlüssel
    schluessel := MD5Print(MD5String(Block1 + schluessel + Block1));
  until index > i5;
  result := Block2;
end;
Damit sollte auch der Rest verschlüsselt werden.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Benutzerbild von maximus Caesar
maximus Caesar

Registriert seit: 26. Sep 2004
Ort: Biberach
319 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: 2 Prozeduren zu langsam

  Alt 21. Nov 2005, 22:00
Danke! KAnnst du auch noch die Entschlüsselungs Prozedur Anpassen?
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: 2 Prozeduren zu langsam

  Alt 21. Nov 2005, 22:13
Na gut, mir war eh grad fad.

Delphi-Quellcode:
function TVerschluesselung.Entschluesseln(passwort: string; Text: string):
  string;
var
  passwortverschluesselt, schluessel: string;
  block1, block2, text2: string;
  index, i, i5: Integer;
begin
  //ersten Schlüssel erzeugen
  passwortverschluesselt := MD5Print(MD5String(Passwort));
  passwortverschluesselt := MD5Print(MD5String(passwort + passwortverschluesselt
    + passwort));
  schluessel := passwortverschluesselt;
  //erster Schlüssel erzeugt

  block1 := '';
  block2 := '';
  i5 := length(Text) div 32;
  text2 := text;
  index := 0; //BlockIndex

  //entschlüsseln
  repeat
    //Block ausschneiden
    block1 := copy(text2, 1 + index * 32, 32);
    //Block entschlüsseln
    for i := 1 to length(Block1) do
      Block1[i] := chr(ord(Block1[i]) - ord(Schluessel[i]));
    block2 := block2 + block1;
    index := index + 1;
    //Neuer Schlüssel
    schluessel := MD5Print(MD5String(Block1 + schluessel + Block1));
  until index > i5;
  result := Block2;
end;
Habs nicht probiert ... sagst mir wieder obs schneller gworden ist?
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Benutzerbild von maximus Caesar
maximus Caesar

Registriert seit: 26. Sep 2004
Ort: Biberach
319 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: 2 Prozeduren zu langsam

  Alt 21. Nov 2005, 22:23
eindeutig Schneller!
Benötigt nur noch 11/30tel der ZEit!
Danke!!!!!!
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: 2 Prozeduren zu langsam

  Alt 21. Nov 2005, 22:41
11/30igstel ?

Hm, dachte eigentlich, dass es fast noch schneller hätte sein müssen, als die erste Procedur.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz