Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Sonderzeichen beim abspeichern in der DB funktioniert nicht (https://www.delphipraxis.net/150595-sonderzeichen-beim-abspeichern-der-db-funktioniert-nicht.html)

stefan681 21. Apr 2010 15:06

Datenbank: Advantage • Version: 9.10 • Zugriff über: Advantage Komponeten

Sonderzeichen beim abspeichern in der DB funktioniert nicht
 
Hallo,

wir haben folgendes Problem:

Ein verschlüsseltes Passwort soll in einem String-Feld in der Datenbank abgespeichert werden.

In diesem Passwort sind bewusst auch Sonderzeichen enthalten (ASCII Bereich von 32 -255)

Dieses Passwort wird nicht richtig in die Datenbank abgespeichert.

Wir übergeben das Passwort einer Query und schreiben es in die Datenbank.

Delphi-Quellcode:
   
query.sql.text:='update Benutzer set passwort=:Ppass where LOGINname= :PNAME';
query.ParamByName('ppass').AsString := pass;
query.ParamByName('Pname').AsString:= benutzer;
Query.ExecSQL;

Beim Debuggen können wir ja sehen, welches Passwort in die Datenbank geschrieben werden soll.

Der Fehler betrifft nur einzelne Zeichen, z. B. tMdú•
erhalten wir in der Entwicklungsumgebung tMdú• angezeigt.

In der Datenbank wird das letzte Zeichen "•" als dicker Strich von oben nach unten dargestellt.
Wenn wir die Daten aus der Datenbank in einen Editor kopieren, wird das Zeichen wieder als Punkt angezeigt.
Wenn wir das gespeicherte Passwort dann beim nächsten Neustart gegen die Benutzereingabe überprüfen, wird das Zeichen falsch entschlüsselt.

Wir verwenden Delphi 2010 und Windows 7.

Das gleiche Programm funktoniert unter Delphi 7 und Windows XP.
Was könnte das sein?

shmia 21. Apr 2010 16:35

Re: Sonderzeichen beim abspeichern in der DB funktioniert ni
 
Ich würde das Passwort an deiner Stelle mit Base16, Base32 oder Base64 kodieren und dekodieren.
Damit sind alle Probleme mit Zeichensatzumwandlungen durch Datenbanken umgangen.
Ein weiterer Vorteil ist, dass du dann im Passwort alle Zeichen von 0 bis 255 benützen darfst.

Funktionen zur Base16-Kodierung (was nix anderes ist als der gute alte Hexcode) findest du hier.

p80286 22. Apr 2010 12:02

Re: Sonderzeichen beim abspeichern in der DB funktioniert ni
 
Zum einen ist der String unter D2010 kein Ansistring mehr sondern ein Widestring.
Wie Du schon so schön sagtest, die "Darstellung". Letztendlich ist es, egal wie ein Zeichen dargestellt wird, wenn es an der finalen Empfängerposition "richtig" interpretiert wird.
Sobald du Daten hast, die interpretiert werden sollten/könnten , und char/string/text gehören ganz klar dazu, dann solltest Du sehr viel Abstand zu den entsprechenden Datentypen nehmen, und alles als array of Byte/Word.... behandeln.

Es gibt DBS die aufgrund Ihrer Import- und Exportübersetzungstabellen einen sinnvollen Text zu Buchstabensalat verkrüppeln können.
Auch dort solltest Du Dich informieren.

Gruß
K-H

mkinzler 22. Apr 2010 12:21

Re: Sonderzeichen beim abspeichern in der DB funktioniert ni
 
Zitat:

Zum einen ist der String unter D2010 kein Ansistring mehr sondern ein Widestring.
Nein UnicodeString. WideString ist ein OLE-Typ

p80286 22. Apr 2010 13:06

Re: Sonderzeichen beim abspeichern in der DB funktioniert ni
 
*Schäm*
ich kann nur bis 8 zählen.
Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz