![]() |
Eure Anregungen für das DEC 5.3 gebraucht
Hallo DPler,
wie einige von Euch vielleicht schon wissen, arbeite ich derzeit an der DEC 5.3. Bisher sind folgende Änderungen schon fertig:
In diesem Thread geht es um Überlegungen und Wünschen zum nächsten Release. Neue Hashes und Cipher wird es in dieser Version nicht geben, dafür fehlt leider die Zeit. Konkret ergeben sich durch meine Arbeit einige Umstellungen, wobei ich den Aufwand für die Konvertierung von DEC 5.1 und 5.2 nutzenden Projekten so gering wie möglich halten werde. Prinzipiell entfällt aber der Datentyp Binary, da nun alles auf Bytes arbeitet. Im Gegensatz zu früheren Code-Snippets hier im Forum, wird diese Umstellung keine zusätzlichen Sicherheitsprobleme schaffen, da immer auf den Eingabedaten gearbeitet wird, diese also nicht unnötig vervielfältigt werden und im Speicher rumfliegen. Wo ich jetzt die Anregung von Euch, den DEC Nutzern, gebrauchen kann: Das gewünschte Stringhandling in den Formatierungsklassen (TDECFormat, TFormat_xyz). Es soll ja auch die Möglichkeit geben z.B. HEX zu Strings und Strings zu HEX zu wandeln. Technisch soweit kein Problem, aber es kommen je nach Art des Ziels natürlich unterschiedliche Ergebnisse raus. Angenommen, es gäbe z.B. die folgenden Funktionen für TDECFormat:
Delphi-Quellcode:
Würde ich nun TFormat_HEX.DecodeString('74657374') in einem aktuellen unicodefähigen Delphi aufrufen, bekäme ich ja nur unlesbaren Quatsch heraus, bei TFormat_HEX.DecodeAnsiString('74657374') jedoch den AnsiString "test". TFormat_HEX.EncodeString('test') liefert bei Unicode ja das Ergebnis 7400650073007400, bei EncodeAnsiString('test') natürlich die 74657374.
class function EncodeString(const Value: string): string; overload;
class function DecodeString(const Value: RawByteString): string; overload; class function EncodeAnsiString(const Value: AnsiString): AnsiString; overload; class function DecodeAnsiString(const Value: RawByteString): AnsiString; overload; class function EncodeWideString(const Value: WideString): WideString; overload; class function DecodeWideString(const Value: RawByteString): WideString; overload; Ich hätte das gerne zusammengelegt, jedoch finde ich keine allgemeingültige Lösung. Es wäre Hellsehen gefordert zu wissen, ob die Eingabedaten in HEX Ansi oder Unicode sind. Hat jemand eine Idee hierzu? Was wäre Euch lieber, wäre es so wie oben gepostet für jedermann verständlich? Oder würdet Ihr für DecodeString('74657374') das Ergebnis "test" immer erwarten, egal ob Unicode oder ANSI (was ja eigentlich verkehrt wäre)? Es geht hier nur um das Format-Handling von Strings, die Byte/Buffer-Methoden und Cipher/Hashes sind hiervon natürlich nicht betroffen. Gruß, Assertor |
Re: Eure Anregungen für das DEC 5.3 gebraucht
Vorweg: Ich kenne das DEC nicht wirklich (man hat ja nie genug Zeit, eigentlich wollte ich es mir schon lange genauer ansehen...).
Was Unicode angeht: Dafür gibt es doch das entsprechende Compiler Define, anhand dessen man das Vorgehen unterscheiden kann. Heißt: Gibt es dieses define, dann ist ein String ein UnicodeString, andernfalls ein AnsiString. Lässt sich das nicht auch in deinem Fall so umsetzen? Bei mir sieht das z.B. so aus:
Delphi-Quellcode:
{$ifdef UNICODE}
Result := Utf8ToString(ResultString); {$else} Result := Utf8Decode(ResultString); {$endif} |
Re: Eure Anregungen für das DEC 5.3 gebraucht
Hallo jaenicke,
Zitat:
Ich muß mal testen, wie sich das im Zusammenhang mit den Funktionen Encode/DecodeAnsiString und -WideString verhält, damit ein möglichst intuitives Verhalten verhanden ist. Viele Grüße, Assertor P.S.: Zitat:
|
Re: Eure Anregungen für das DEC 5.3 gebraucht
Sau gut dass du das DEC weiterentwickelst :) Ich denke mal in dieser Version kann man das vergessen aber für auf lange Zeit gesehen wären eigene Implementierungen von SSL, SRP, etc. ziemlich interessant.
Zum Unicode Problem: Da würde ich zweigleisig mit DecodeWideString und DecodeAnsiString bzw. mit DecodeStringW und DecodeStringA, ganz nach API Vorbild arbeiten. Ist wohl am wenigsten verwirrend. Zusätzlich kann man eine Funktion DecodeString implementieren die je nach Delphi Version (prüfen mit {$IFDEF UNICODE}) die W oder A Variante aufruft. |
Re: Eure Anregungen für das DEC 5.3 gebraucht
Hi,
Zitat:
Zitat:
Zitat:
Ich habe nun EncodeString() und DecodeString() überladen für Unicode/Ansi/Wide-String und zusätzlich Encode/DecodeAnsiString und -WideString eingeführt. Das erlaubt auch das explizite aufrufen einer gewünschten Funktion, ohne vorher einen Typcast machen zu müssen - das übernimmt dann die Compiler Magic für uns. Die Idee mit UTF8 war toll, danke nochmal an Sebastian :thumb: In jetzigen Tests läuft alles problemlos mit TFormat_Copy / TFormat_HEX - in allen 3 Stringvarianten unter D2010 bzw. 2 Varianten unter D7. Jetzt bin ich gerade an der Re-Implementierung von Base64, PGP, XX, UU und Escaped Encoding. Da hier jetzt nicht mehr auf PAnsiChar sondern PByte gearbeitet wird, ist es halt etwas Arbeit... @Hagen: Falls Du mitliest, was ist denn Dein MIME32 für ein Format? Die Ergebnisse aus der DEC 5.1 (und 5.2) stimmen z.B. mit Base32 überhaupt nicht überein. Du hattest es kommentiert mit "MIME ähnliches Base32". Also ein eigener Formatansatz. Ich würde lieber Base32 wie in RFC4648 umsetzen. Hatte es seinerzeit einen besonderen Grund ein eigenes MIME-ähnliches Format für Base32 einzuführen? Gruß, Assertor :dp: |
Re: Eure Anregungen für das DEC 5.3 gebraucht
Hmm, wer lernen will, muss manchmal Fragen stellen.
Ich traue mich mal: Wer oder Was ist DEC? Wiki hilft mir da nicht so weiter... :oops: |
Re: Eure Anregungen für das DEC 5.3 gebraucht
Liste der Anhänge anzeigen (Anzahl: 1)
DEC steht für Delphi Encryption Compendium. Dabei handelt es sich um eine Unit-Sammlung von Hagen Reddmann, die einiges bzgl. Verschlüsselung und Hashing beinhaltet.
|
Re: Eure Anregungen für das DEC 5.3 gebraucht
Vielen Dank!
Also für den Hobby-Programmierer (so er sich nicht akademisch mit dem Thema beschäftigt) wohl eher ein Randthema, oder? |
Re: Eure Anregungen für das DEC 5.3 gebraucht
Zitat:
Zitat:
|
Re: Eure Anregungen für das DEC 5.3 gebraucht
Ah ein neues DEC? Kann ich gut gebrauchen wo ich jetz auf D2010 umstelle, da kommts doch zu en paar Problemen mit dem bestehenden. :) freu mich schon :D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 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