![]() |
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; |
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.
|
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])
|
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.
|
AW: Alten Code von Delphi 5 benutzen
Zitat:
|
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) |
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; |
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. |
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). |
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 07:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz