Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Unicode + BASE64? (https://www.delphipraxis.net/98013-unicode-base64.html)

blackdrake 20. Aug 2007 19:19


Unicode + BASE64?
 
Hallo.

Wieder mal eine meiner vielen Fragen zu Unicode bzw. WideStrings...

Ich möchte einen WideString etwas chiffrieren, sodass dieser nicht direkt über einen HexEditor ausgelesen werden kann. Soll nur eine leichte Chiffrierung wie z.B. BASE64 sein. Jetzt hab ich hier eine schöne Unit für BASE64 gefunden: http://www.delphipraxis.net/internal...ect.php?t=1153 . Diese akzeptiert aber nur Strings als Eingabe. Wenn ich jetzt aber einen Unicode-Widestring habe, würden Nicht-ANSI-Zeichen bei der Abwärtscovertierung verloren gehen. Kennt jemand ein WideString-BASE64 oder ist das totaler Schwachsinn, was ich hier rede? Leider weiß ich gar nicht, wie ein WideString eigentlich funktioniert, da ich bis jetzt nur wenig damit gearbeitet habe. showmessage(copy(mein_widestring, ..., ...)) hat aus irgendeinem Grund ANSI-Strings widergegeben... irgendwie versteh ich die Funktionsweise nicht ganz. :gruebel:

Gruß
blackdrake

Zacherl 20. Aug 2007 19:49

Re: Unicode + BASE64?
 
Base64 würde ich dir auf jeden Fall nicht raten .. nimm eine einfache XOR Verschlüsselung oder die RCx Unit von Hagen. Wenn du Base64 verwendest kannst du das verschleiern auch gleich lassen :P

blackdrake 20. Aug 2007 21:10

Re: Unicode + BASE64?
 
Hallo.

Danke für den Tipp. Ich schau mir das mal an.

Gruß
blackdrake

blackdrake 24. Aug 2007 23:47

Re: Unicode + BASE64?
 
Hallo.

Ich will nun DEC für die Verschlüsselung nutzen.

Dort gibt es eine Funktion der Art Verschlüsselung(input: string): string.

Ist es damit überhaupt möglich, einen WideString zu speichern?

Kann es sein, dass bei der Umwandlung WideString -> String -> WideString alle Unicode-Zeichen (z.B. asiatische) verloren gehen? Ich kapiere es einfach nicht, wie ein WideString funktioniert. Eigentlich könnte der String bei der WideString -> String Umwandlung ja auch der String doppelt so lang werden, damit z.B. asiatische Zeichen nicht verloren gehen.

Wie muss ich das jetzt machen?

Gruß
blackdrake

Bernhard Geyer 25. Aug 2007 07:10

Re: Unicode + BASE64?
 
Konvertiere einfach den String nach UTF8. Dürfte die einfachste Lösung sein. Oder du findest eine Funktion die mit Speicherbereichen (also Typlos) arbeitet und die Daten byteweise "anfaßt"

phXql 25. Aug 2007 09:16

Re: Unicode + BASE64?
 
Du musst nur den Widestring in ein Byte-Array umwandeln und dann das Array verschlüsseln.
Beim Entschlüsseln lädst du das Byte-Array, entschlüsselst es und wandelst es dann in einen Widestring um.

blackdrake 25. Aug 2007 13:30

Re: Unicode + BASE64?
 
Hallo.

Bytearray? Wie soll ich das machen? Copy() funktioniert ja nur mit Strings. Somit kann ich keinen dynamischen "array of bytes" erstellen und ihn dann mit einer "for"-Schleife unter verwendung von "copy" füllen.

Gruß
blackdrake

phXql 25. Aug 2007 14:03

Re: Unicode + BASE64?
 
Weiss nich wie das mit Delphi geht. In C# könnt ichs dir sagen ;)

Zacherl 25. Aug 2007 14:17

Re: Unicode + BASE64?
 
Na du deklarierst dir ein Array of Char (Char UND Byte = 0..255) verwendest SetLength(ByteArray, Length(UnicodeStr)) und kopierst mittels Copy(@ByteArray[0], @UnicodeStr[1], Length(UnicodeStr)) das ganze ins Array.

Dann kannst du der Funktion zum verschlüsseln einfach das ByteArray übergeben. Da dieses als Array of Char deklariert ist und somit nichts anderes als in String ist sollte Delphi das akzeptieren. Ansonsten einfach vorher nach String() typecasten.

blackdrake 25. Aug 2007 14:27

Re: Unicode + BASE64?
 
Mhh... so in etwa? Hier sagt er, es seien inkompatible Typen. :(

Delphi-Quellcode:
function WideStringToString_Lossyless(UnicodeStr: WideString): string;
var
  ByteArray: Array of Char; // Array of Byte
begin
  SetLength(ByteArray, Length(UnicodeStr));
  ByteArray := Copy(@ByteArray[0], @UnicodeStr[1], Length(UnicodeStr));
  result := string(ByteArray);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:24 Uhr.
Seite 1 von 6  1 23     Letzte »    

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