![]() |
Re: DEC 5.1 wie benutzen?
@Jargos:
bei ADest.WriteBuffer(Salt[1], Length(Salt)); in Encrypt() kannst du vor oder danach eigene Daten abspeichern. Die musst du natürlich in Decrypt() auch wieder rauslesen. Also eigene Datenmenge abspeichern und exakt gleiche Datenmenge vor dem Entschlüsseln wieder rauslesen. Du musst nur die TStream basierten Prozeduren abändern. Gruß Hagen PS: beachte das diese Daten dann unverschlüsselt sind. Möchtest du dies nicht dann kannst du auch ein zweifaches .EncodeStream(ASource, ADest,..) einbauen. das ginge dann so
Delphi-Quellcode:
Nur musst du beachten das die Anzahl an Bytes in AData exakt ein Mehrfaches der Cipher.BufferSize sind um ein vorzeitiges Padding zu vermeiden. Du verschlüsselt als so als wenn in ASource ein Header von dir vor den eigentlichen Daten drinnenstehen würde.with ...Create do try ...blabla Init Sequenz SetLength(AData, Cipher.Context.BufferSize * x); AData := EncodeBinary(AData, TFormat_COPY); ADest.WriteBuffer(AData[1], Length(AData)); EncodeStream(ASource, ADest, ....); finally Free; end; |
Re: DEC 5.1 wie benutzen?
Zitat:
Zitat:
Gruß Gammatester |
Re: DEC 5.1 wie benutzen?
;) hey, ich weiß wer du bist und demzufolge weiß ich auch wie du es gemeint hast, ich bin zu keiner Zeit davon ausgegangen das ich mich angegriffen fühlen müsste ;)
Ja, man kann das oben noch einbauen, ginge sogar sehr einfach. Das Thema habe ich aber unter -> Es gibt Verbesserungen und hier in der DP schon als Source zu finden, abgehackt. Ich muß halt immer einen Kompromiß anstreben, zwischen dem was ich hier als Beispiele poste und noch verständlich ist und dem was alles möglich wäre. Kryptographie ist deshalb sicher weil man das bestehende Wissen auch begriffen hat, man weiß es also. Erkläre ich zuviel kann mir keiner mehr folgen und man wird auf gut Glauben das wiederkauen wa ich an Beispielen gepostet habe ohne es verstanden zu haben. Das ist dann keine Kryptographie mehr, leider. denoch hier die Änderungen mal angedeutet:
Delphi-Quellcode:
ABER VORSICHT! Die Berechnung der CMAC hängt stark vom verwendeten Ciphermode ab. Im Grunde ist diese CMAC nur dann aussagekräftig wenn im cmCTS?/cmCFS? Modus gearbeitet wird. Im cmCBCx Modus kann man eine CMAC berechnen lassen nur wird diese auf Grund der Selbstsynchronisation des CBC Modus eben nicht aussagekräft sein.
procedure Encrypt(ASource, ADest: TStream; ...blabla); overload;
var ... blabla MAC: Binary; begin with ... do try ...blabla Initialisierung hier EncodeStream(ASource, ADest, -1); MAC := CalcMAC(TFormat_COPY); ADest.WriteBuffer(MAC[1], Length(MAC)); finally Free; ....bla ProtectBinary(MAC); end; end; procedure Decrypt(ASource, ADest: TStream; ...blabla); overload; var ... blabla MAC: Binary; begin with ... do try ...blabla Initialisierung hier DecodeStream(ASource, ADest, ASource.Size - ASource.Position - BufferSize); SetLengh(MAC, BufferSize); ASource.ReadBuffer(MAC[1], Length(MAC)); if MAC <> CalcMAC(TFormat_COPY) then raise Exception.Create('invalid decryption data maybe modifyed or please verify your password'); finally Free; ....bla ProtectBinary(MAC); end; end; Der cmCTS?/cmCFS? Modus enthält quasi einen Lawineneffekt. Ein falsches Bit lösste eine Lawine aus die alle nachfolgenden Bits verändert, bis zum Ende der Verschlüsselung und der Berechnung des CMAC. Die Selbstsynchrnisation ist zerstört dafür ergibt sich quasi sowas wie eine Prüfsumme über alle Datenbits. Dies trifft aber auf alle selbstsynchronisierenden Modis nicht zu. So. Und wieder die Verständlichkeit dieses Threades verschlechtert ;) Gruß Hagen |
Re: DEC 5.1 wie benutzen?
Ich möchte hier kurz nochmal was anderes einwerfen und zwar bekomme ich bei Delphi 2007 sehr viele Warnungen:
Delphi-Quellcode:
Ich weiß nicht ob die schlimm sind, deshalb möchte ich nur mal eben nachfragen. Ich hab es immer lieber, wenn gar keine Warnungen auftreten.
[DCC Warnung] DECData.pas(3948): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3948): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3949): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3949): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3950): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3951): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3951): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3951): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3952): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3952): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3954): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3954): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3954): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3954): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3955): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3955): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3957): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3957): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3958): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3958): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3958): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3958): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3959): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3959): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3959): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3962): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3962): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3963): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3963): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3963): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3963): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3964): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3964): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3964): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECData.pas(3964): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECHash.pas(2128): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECHash.pas(2130): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECHash.pas(2133): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECHash.pas(2134): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECHash.pas(2168): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECHash.pas(2170): W1012 Konstantenausdruck verletzt untere Grenzen [DCC Warnung] DECHash.pas(2172): W1012 Konstantenausdruck verletzt untere Grenzen |
Re: DEC 5.1 wie benutzen?
In den Projektoptionen -> Compiler -> alle Laufzeitfehlerüberprüfungen wie RangeChecks usw. ausschalten. Das sollte Standard sein. Die gemeldeteten "Fehler" sind in Wahrheit keine, dh. alles ist richtig. Man könnte jetzt im Projekt/Units selber diese Überprüfungen per Compilerswitches deaktivieren, aber auch das hat Nachteile.
Also {$R-} am Anfang der Units einfügen oder alternativ in Ver.inc diesen Switch aufnehmen um damit in allen DEC Units diese Überprüfung auszuschalten. Gruß Hagen |
Re: DEC 5.1 wie benutzen?
OK, Danke.
|
Re: DEC 5.1 wie benutzen?
Hallo zusammen,
erstmal Danke für die Tipps. Ich habe so einigermaßen umgesetzt, was ich wollte.
Delphi-Quellcode:
Hier schaffe ich es, die Daten ans Ende der Datei anzuhängen.
Adata := 'teststring123';
.... ADest.WriteBuffer(Salt[1], Length(Salt)); EncodeStream(ASource, ADest, -1, AProgress); ... ADest.WriteBuffer(Adata[1], Length(Adata)); .... Ist im Klartext (Erstmal egal). Aber wie schaffe ich es, diese Daten beim decodieren wieder auszulesen. Bin bei allen Versuchen gescheitert.
Delphi-Quellcode:
Aber das geht nicht (werdet ihr schon gesehen haben :oops: )
... habe hier versucht am Ende der Datei + lenge adata, die Daten auszulesen.
ASource.ReadBuffer(adata[1], Length(Salt) + length(adata)); form1.Label1.Caption := adata; Hat jemand noch einen Wertvollen Tipp für mich Würde mich freuen. Vielen Dank nochmal Jorgos |
Re: DEC 5.1 wie benutzen?
Du musst natürlich zu erste an die Stelle in der Datei springen, an der sich die Daten befinden. Deswegen ist es günstiger diese Daten an den Anfang der Datei zu schreiben. Da kannst du sie einfach lesen und wenn du sie gelesen hast, kannst du einfach den Rest lesen, ohne den Dateizeiger hin und her bewegen zu müssen.
|
Re: DEC 5.1 wie benutzen?
Nicht nur das sondern du musst auch die Größe in Bytes deiner AData mit speichern. Wenn AData also in der Länge variable sein kann dann kannst du diese nur exakt wieder auslesen wenn du deren vorherigen Länge weist. Es sei denn AData hat immer die gleiche Länge, dann kannst du das hardcoded machen, quasi wie im Beispiel mit dem Salt.
Gruß hagen |
Re: DEC 5.1 wie benutzen?
Yepp,
das war´s. Habe alle Info´s, die ich brauche. Danke an alle. Jorgos |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 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