AGB  ·  Datenschutz  ·  Impressum  







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

Alten Code von Delphi 5 benutzen

Ein Thema von Dumpfbacke · begonnen am 11. Mär 2018 · letzter Beitrag vom 13. Mär 2018
Antwort Antwort
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
989 Beiträge
 
Delphi 6 Professional
 
#1

AW: Alten Code von Delphi 5 benutzen

  Alt 11. Mär 2018, 17:52
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;
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.589 Beiträge
 
Delphi 7 Professional
 
#2

AW: Alten Code von Delphi 5 benutzen

  Alt 11. Mär 2018, 18:09
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.535 Beiträge
 
Delphi 12 Athens
 
#3

AW: Alten Code von Delphi 5 benutzen

  Alt 11. Mär 2018, 19:58
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).
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Mär 2018 um 20:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Alten Code von Delphi 5 benutzen

  Alt 11. Mär 2018, 22:12
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Alten Code von Delphi 5 benutzen

  Alt 12. Mär 2018, 06:08
Hallo,
ich denke ja, der Code soll funktionieren mit den geringsten Anpassungen,
und das wäre die Lösung von HolgerX

String -> AnsiString.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.232 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Alten Code von Delphi 5 benutzen

  Alt 12. Mär 2018, 07:26
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.
Solange du kein WinAPI-Funktionen verwendest stellst selbst $00 kein Problem dar.
Früher zu D1-Zeiten hatte ich mal auch String als Buffer für Datenübertragung im Einsatz. Und dort sind auch $00 vorgekommen.
Einzig wegen der 255-Zeicheneinschränkung habe ich irgendwann auf Byte-Stream gewechselt.

Aber *schön* ist was anderes.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Alten Code von Delphi 5 benutzen

  Alt 12. Mär 2018, 08:11
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.
Solange du kein WinAPI-Funktionen verwendest stellst selbst $00 kein Problem dar.
Früher zu D1-Zeiten hatte ich mal auch String als Buffer für Datenübertragung im Einsatz. Und dort sind auch $00 vorgekommen.
Einzig wegen der 255-Zeicheneinschränkung habe ich irgendwann auf Byte-Stream gewechselt.

Aber *schön* ist was anderes.
Da man (Du schon) selten weiß, wann das API zum Zuge kommt, sollte man auch die Finger davon lassen.
Hier liest man immer wieder, daß irgendjemand über String stolpert, und sich in irgendwelchen Kodierungen verheddert. Ebenso scheint die Adressierung von statischen und dynamischen Arrays in den Bereich des Voodoo zu gehören. Wenn dann noch Pointer ins Spiel kommen, wird es für viele Zauberlehrlinge richtig eng.
(hatte ich schon Records und Wortgrenzen erwähnt?)

Darum finde ich den Hinweis auf mögliche Untiefen auch heute noch sehr wichtig. Vor allem weil es genügend alten Kode gibt, an dem der eine oder andere verzweifelt.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Alten Code von Delphi 5 benutzen

  Alt 12. Mär 2018, 08:24
Würde ein
Ord(InString[I]) xor (StartKey shr 8); nicht auch ganz ausgezeichnet funktionieren ?
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Alten Code von Delphi 5 benutzen

  Alt 12. Mär 2018, 08:28
Ich rate auch dazu, wenn es denn ein string objekt bleiben soll, wenigstens eine Base64 en-/decodierung hinzuzufügen damit es keine string inkompatibilät geben kann oder auf ein array (für encodierten string) umzusteigen.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:15 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-2025 by Thomas Breitkreuz