AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Sonderzeichen beim abspeichern in der DB funktioniert nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Sonderzeichen beim abspeichern in der DB funktioniert nicht

Ein Thema von stefan681 · begonnen am 21. Apr 2010 · letzter Beitrag vom 22. Apr 2010
Antwort Antwort
stefan681

Registriert seit: 16. Jun 2005
18 Beiträge
 
#1

Sonderzeichen beim abspeichern in der DB funktioniert nicht

  Alt 21. Apr 2010, 15:06
Datenbank: Advantage • Version: 9.10 • Zugriff über: Advantage Komponeten
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?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Sonderzeichen beim abspeichern in der DB funktioniert ni

  Alt 21. Apr 2010, 16:35
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.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Sonderzeichen beim abspeichern in der DB funktioniert ni

  Alt 22. Apr 2010, 12:02
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Sonderzeichen beim abspeichern in der DB funktioniert ni

  Alt 22. Apr 2010, 12:21
Zitat:
Zum einen ist der String unter D2010 kein Ansistring mehr sondern ein Widestring.
Nein UnicodeString. WideString ist ein OLE-Typ
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Sonderzeichen beim abspeichern in der DB funktioniert ni

  Alt 22. Apr 2010, 13:06
*Schäm*
ich kann nur bis 8 zählen.
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:27 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