Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Alten Code von Delphi 5 benutzen (https://www.delphipraxis.net/195583-alten-code-von-delphi-5-benutzen.html)

Dumpfbacke 11. Mär 2018 16:53

Alten Code von Delphi 5 benutzen
 
Hallo Delphianer,
ich wollte einen alten Code von Delphi 5 hier unter Tokyo benutzen. Leider funktioniert es nicht mehr.

Kann mir jemand sagen wo es denn dran liegt. Ich möchte hier noch einfach Strings Ver- und Ent - schlüsseln um ein Passwort in einer Ini datei zu speichern. Es ist nichts super geheimes und hierzu genügt es mir es mit dieser Routine zu machen wenn diese denn funktionieren würde.


Danke


Delphi-Quellcode:

function TFTPMailForm.Encrypt(const InString: string; StartKey, MultKey, AddKey: Integer): string;
var I: Byte;
begin
 Result := '';
 for I:=1 to Length(InString) do
  begin
   Result := Result + CHAR(BYTE(InString[I]) xor (StartKey shr 8));
   StartKey := (Byte(Result[I]) + StartKey) * MultKey + AddKey;
  end;
end;

KodeZwerg 11. Mär 2018 17:12

AW: Alten Code von Delphi 5 benutzen
 
Schade das du nicht schreibst was nicht funktioniert, ich könnte mir einen Überlauf an dieser Stelle hier vorstellen: Byte() falls der Wert über 255 hinaus geht.

Delphi.Narium 11. Mär 2018 17:12

AW: Alten Code von Delphi 5 benutzen
 
Wenn ein Zeichen (Char) größer als 1 Byte ist, wird dashier nicht mehr funktionieren: BYTE(InString[I]) bzw. Byte(Result[I])

Dumpfbacke 11. Mär 2018 17:15

AW: Alten Code von Delphi 5 benutzen
 
Ja natürlich sollte ich noch schreiben was nicht funtioniert. Ich habe noch eine Routine zum Decypt. Wenn ich einen Sring zuerst verschlüssele und dann entschlüsseln möchte kommt an Ende nicht mehr der ursprüngliche Sting an. Es funktioniert eigentlich nur mit dem ersten Zeichen.

Dumpfbacke 11. Mär 2018 17:26

AW: Alten Code von Delphi 5 benutzen
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1395807)
Wenn ein Zeichen (Char) größer als 1 Byte ist, wird dashier nicht mehr funktionieren: BYTE(InString[I]) bzw. Byte(Result[I])

Ok ist Dir auch noch bekannt in was ich es ändern muss ?

KodeZwerg 11. Mär 2018 17:32

AW: Alten Code von Delphi 5 benutzen
 
Könntest Du eventuell ein kleinen beispiel code zeigen der all das beinhaltet?
also wo man alles sehen wie, wie dein encrypt, auch decrypt und wie du beides aufrufst meine ich.
Vielleicht ist ja decrypt falsch, oder du rufst es falsch auf? Hier kann ich nur raten.

PS: es kann gut sein das deine Routine aus einem String einen kaputten String macht (falls eines deiner Bytes ein $00 ist zum beispiel)

HolgerX 11. Mär 2018 17:52

AW: Alten Code von Delphi 5 benutzen
 
Hmm..

D5 ANSI
Tokio Unicode

Quick and Dirty:

Delphi-Quellcode:
function TFTPMailForm.Encrypt(const InString: AnsiString; StartKey, MultKey, AddKey: Integer): AnsiString;
var I: Byte;
begin
 Result := '';
 for I:=1 to Length(InString) do
  begin
   Result := Result + AnsiChar(BYTE(InString[I]) xor (StartKey shr 8));
   StartKey := (Byte(Result[I]) + StartKey) * MultKey + AddKey;
  end;
end;

Delphi.Narium 11. Mär 2018 18:09

AW: Alten Code von Delphi 5 benutzen
 
Bei Delphi 5 war ein Zeichen eines Strings ein Char.
Ein Char war ein Byte groß.

Man konnte also aus einem Char ein Byte machen und aus 'nem Byte ein Char.

Heute ist ein Char mehr als ein Byte groß, so das die Umwandlung mit Byte(Char) nicht mehr funktioniert. Ein Byte ist jetzt nur noch eine "Teilmenge" von 'nem Char.

Keine Ahnung, wie man Deinen Quelltext nun anpassen muss, damit er weiterhin funktionstüchtig bleibt.

himitsu 11. Mär 2018 19:58

AW: Alten Code von Delphi 5 benutzen
 
Jupp, soll er nur funktionieren und für aktuelle Delphis "komplett" nutzbar sein, dann Byte>Word und Char/String zu WideChar/UnicodeString
oder String>UTF8String und Char>AnsiChar.

Aber soll es funktionieren und kompatibel zu den Berechnungen des alten Delphi sein, dann String>AnsiString und Char>AnsiChar.
PS: Mit UTF8String wäre es für Unicode "vollständig" nutzbar und teilweise mit dem alten ANSI-Code kompatibel, also im Bereich des ASCII (Chars 0 bis 127, inkl. 0-9,a-z,A-Z).

p80286 11. Mär 2018 22:12

AW: Alten Code von Delphi 5 benutzen
 
Also ich habe da so meine Bedenken, das die ursprüngliche Version immer richtig funktioniert hat, da beim Verschlüsseln auch Werte unter x20 generiert werden könnten. Und je nach weiterer Verarbeitung könnte das unschöne Folgen zeitigen. M.M.n sollte das Ergebnis einer Verschlüsselung immer ein Array of Byte sein, das dann Hexadezimal oder Base64 o.ä. dargestellt wird.

Und wenn der übergebene String als Array of Byte gecastet wird und statt lenght sizeof, bzw length(str)*sizeof(char), genutzt wird, sollte man auf der sicheren Seite sein.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:48 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf