AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

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
Seite 1 von 2  1 2   
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
227 Beiträge
 
Delphi 7 Architect
 
#1

Alten Code von Delphi 5 benutzen

  Alt 11. Mär 2018, 16:53
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;
Tanja
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
1.624 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Alten Code von Delphi 5 benutzen

  Alt 11. Mär 2018, 17:12
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.
Gruß vom KodeZwerg
Wenn ein unerwarteter Fehler aufgetreten ist, frage ich mich immer, welche Fehler erwartet wurden...
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
437 Beiträge
 
Delphi 7 Professional
 
#3

AW: Alten Code von Delphi 5 benutzen

  Alt 11. Mär 2018, 17:12
Wenn ein Zeichen (Char) größer als 1 Byte ist, wird dashier nicht mehr funktionieren: BYTE(InString[I]) bzw. Byte(Result[I])
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
227 Beiträge
 
Delphi 7 Architect
 
#4

AW: Alten Code von Delphi 5 benutzen

  Alt 11. Mär 2018, 17:15
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.
Tanja
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
227 Beiträge
 
Delphi 7 Architect
 
#5

AW: Alten Code von Delphi 5 benutzen

  Alt 11. Mär 2018, 17:26
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 ?
Tanja
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
1.624 Beiträge
 
Delphi 2009 Professional
 
#6

AW: Alten Code von Delphi 5 benutzen

  Alt 11. Mär 2018, 17:32
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)
Gruß vom KodeZwerg
Wenn ein unerwarteter Fehler aufgetreten ist, frage ich mich immer, welche Fehler erwartet wurden...

Geändert von KodeZwerg (11. Mär 2018 um 17:35 Uhr)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
599 Beiträge
 
Delphi 6 Professional
 
#7

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
437 Beiträge
 
Delphi 7 Professional
 
#8

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
34.758 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

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).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

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.007 Beiträge
 
Delphi 7 Personal
 
#10

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
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:36 Uhr.
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