AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Nullterminierten String aus MSSQL nvarchar auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Nullterminierten String aus MSSQL nvarchar auslesen

Ein Thema von norwegen60 · begonnen am 26. Sep 2010 · letzter Beitrag vom 27. Sep 2010
Antwort Antwort
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#1

Nullterminierten String aus MSSQL nvarchar auslesen

  Alt 26. Sep 2010, 21:51
Datenbank: Mssql • Version: 2005 • Zugriff über: Delphi7,
Hallo zusammen,

ich möchte verschlüsselte Passwörter in MsSQL in einem nvarchar-Feld abspeichern. Die Verschlüsselung (RC4) kann auch das Zeichen #0 erzeugen. Es ist kein Problem, wenn ich den Wert z.B. per
Code:
qu.fieldbyname('pwd').AsString := sPwd;
in der DB abspeichere. Wenn ich per SQL Server Management Studio den Wert ansehe, ist er komplett abgespeichert.

Sobald ich ihn aber per
Code:
sPwd:=qu.fieldbyname('pwd').AsString;
auslese, ist alles nach #0 abgeschnitten. Ich weiß, dass es geht, wenn ich in MsSQL text statt nvarchar nehme, aber geht es nicht auch mit nvarchar? Ich verwende TAdoQuery

Vielen Dank
Gerd

Geändert von norwegen60 (26. Sep 2010 um 21:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Nullterminierten String aus MSSQL nvarchar auslesen

  Alt 26. Sep 2010, 21:59
Du solltest die Passwörter mit Base16 kodieren.
Base16 ist nichts anderes als eine Hexumwandlung.
siehe z.B. CodeLibrary hier.
Base64 ist platzsparender, aber da Passwörter so kurz sind spielt das keine Rolle.

PS:
Bei Delphi2010 muss man achtgeben, dass die Hexumwandlung auch wirklich
funktionert - evtl. muss Datentyp string durch AnsiString ersetzt werden.

Geändert von sx2008 (26. Sep 2010 um 22:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Nullterminierten String aus MSSQL nvarchar auslesen

  Alt 27. Sep 2010, 09:19
...
Die Verschlüsselung (RC4) kann auch das Zeichen #0 erzeugen. ... Wenn ich per SQL Server Management Studio den Wert ansehe, ist er komplett abgespeichert.
Zufall das dies Klappt. Da auch der MS SQL Server viel C/C++-Code beinhaltet könnte sich das mit jedem Hotfix ändern.

Ein #0 ist nunmal für ein Zeichnkette der Kennzeichner für ein Ende der Zeichenkette (Jedenfalls wenns C/C++ betrifft). Und mir ist keine String-Datentyp bekannt in der das #0 einen gültigen Zeichenwert definiert.


Bei Delphi2010 muss man achtgeben, dass die Hexumwandlung auch wirklich
funktionert - evtl. muss Datentyp string durch AnsiString ersetzt werden.
Da sollte man dann die Funktion anpassen. Auf DB-Seite wird mit nvarchar schon Wide/UTF16-String verwendet. D2010 hat auch als Standard-Stringtyp einen Wide/UTF16-String. Deshalb soltle die Hexwandlung ebenfalls damit zurecht kommen!
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#4

AW: Nullterminierten String aus MSSQL nvarchar auslesen

  Alt 27. Sep 2010, 17:29
Hallo zusammen,

danke für die Feedbacks.
Zitat:
Ein #0 ist nunmal für ein Zeichnkette der Kennzeichner für ein Ende der Zeichenkette (Jedenfalls wenns C/C++ betrifft). Und mir ist keine String-Datentyp bekannt in der das #0 einen gültigen Zeichenwert definiert.
Ich weiß. Von daher hat es mich etwas gewundert, dass ein String den Wert überhaupt richtig an die DB übergeben kann.

Zufall scheint es nicht zu sein, denn ich habe es mehrmals ausprobiert und das Schreiben in die DB (auch unterschiedlicher Werte) hat immer geklappt. Nur beim Lesen wurden sie konsequent abgeschnitten. Als ich es dann mit text in der DB probiert habe, hat auch das sicher geklappt. Dafür aber andere Dinge nicht, die ich sonst noch benötige

Falls keine anderen Lösungen kommen probiere ich es mal mit Base16

Grüße
Gerd
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Nullterminierten String aus MSSQL nvarchar auslesen

  Alt 27. Sep 2010, 17:47
Zufall scheint es nicht zu sein, denn ich habe es mehrmals ausprobiert ...
Und du hast jedesmal unterschiedliche MSSQL-Versionen mit unterschliedlichen Patch-Leveln probiert (Da auch der MS SQL Server viel C/C++-Code beinhaltet könnte sich das mit jedem Hotfix ändern.)?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#6

AW: Nullterminierten String aus MSSQL nvarchar auslesen

  Alt 27. Sep 2010, 19:28
Hallo Bernhard,

da hast du natürlich recht. Das habe ich nicht. Aber ich habe eine andere Idee. Da nur bei ca jeder 5. Generierung ein String mit #0 erzeugt wird, rufe ich die Funktion so lange auf, bis im String kein #0 mehr enthalten ist. Ich verwende den Code aus http://www.delphipraxis.net/26732-rc...uesselung.html wo noch eine zusätzlicher Zufallsstring hinzuaddiert wird wodurch sich der verschlüsselte String immer wieder ändert. Einzige Unsicherheit ist, dass es Passwort/Schlüsselkombinationen gibt, wo #0 öfter vorkommt.

Gerd
  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 22:35 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