AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MySQL : verschlüsselte Daten speichern
Thema durchsuchen
Ansicht
Themen-Optionen

MySQL : verschlüsselte Daten speichern

Ein Thema von rawi · begonnen am 19. Mär 2010 · letzter Beitrag vom 20. Mär 2010
Antwort Antwort
Seite 1 von 2  1 2      
rawi

Registriert seit: 16. Mär 2010
Ort: im Westen Deutschlands
38 Beiträge
 
Delphi 2010 Professional
 
#1

MySQL : verschlüsselte Daten speichern

  Alt 19. Mär 2010, 13:04
Datenbank: MySQL • Zugriff über: Internet
Hallo DP'ler,
nachdem mir hier im Forum schon einige Beiträge geholfen haben, möchte ich mich heute mit einem Problem an euch wenden bei dem ich zur Zeit keine Lösung sehe. Vermutlich sehe ich den Wald vor lauter Bäumen nicht.

Doch nun zu meinem Problem:
Ich habe eine MySQL-DB im Web liegen. Nun möchte ich verschlüsselte Daten in dieser DB speichern. Die Daten, mit RC4 verschlüsselt, ergeben ja eine wirre Zeichenfolge. So soll es ja auch sein.
Versuche ich diese Daten nun in die DB zu schreiben bekomme ich ab und zu die Fehlermeldung 'Fehler in der SQL-Syntax...' und er zeigt mir einen Teil dieser wirren Zeichenfolge an. Das entsprechende Feld in der DB ist als Varchar deklariert. Habe es aber auch mit anderen Feldtypen versucht.

Nun habe ich versucht den codierten String in Hex umzuwandeln und dann zu speichern. Jetzt werden die Daten ohne Fehler gespeichert, klar sind ja keine ungewöhnlichen Zeichen mehr drin, aber leider ist ein decodieren nach Umwandlung des Hexstrings auch nicht jedesmal möglich. Diese Vorgehensweise habe ich dann erst mal zu den Akten gelegt.

Zur Zeit fange ich den Fehler ab und sende den Insert-Befehl mit neu codierten Daten erneut ab. Benötige aber manchmal trotzdem mehrere Versuche bis es funktioniert.

Ich hoffe ihr könnt mir mit einem Lösungsansatz helfen. Sollten noch weitere Info's benötigt werden, einfach nur melden.

Schon mal vielen Dank im Voraus.

Gruß rawi
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: MySQL : verschlüsselte Daten speichern

  Alt 19. Mär 2010, 13:06
Verwendest du parametrisierte Inserts?
Falls nein, stell darauf um!
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#3

Re: MySQL : verschlüsselte Daten speichern

  Alt 19. Mär 2010, 13:07
Du musst die "wirre Zeichenfolge" escapen. Je nach Sprache ginge das z.B. mit AnsiQuotedStr() oder mysql_real_escape().
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
rawi

Registriert seit: 16. Mär 2010
Ort: im Westen Deutschlands
38 Beiträge
 
Delphi 2010 Professional
 
#4

Re: MySQL : verschlüsselte Daten speichern

  Alt 19. Mär 2010, 16:29
Erst einmal vielen Dank für die schnellen Antworten.

@Bernhard
ich verwende keine parametrisierten Inserts, der Insert wir in Delphi per Code erstellt. Falls es das ist was du meintest.
Delphi-Quellcode:
strAnsi := 'insert into tblData (rechnername, rechnerno, ....
.... values
' +
            '("' + edRechner.Text +
            '", "' + edRechnerNr.Text +
            ....
             '", "' + encode_data(memBemerkung.Text) +
             '", "help1", "help2", "' + strAktDate + '")';
Diese Statement schicke ich dann mittels

if mysql_real_query(_myCon, query, Length(query)) = 1 then zur DB. Hab auch schon die " durch ' ersetzt.

@DeddyH
Das mit dem escapen mach ich schon im Quelltext. So wie ich das gelesen haben machen die Funktionen AnsiQuotedStr() oder mysql_real_escape_string() doch nichts anderes als den Text in "" zu setzen.


Die Fehlermeldung sieht gekürzt wie folgt aus:

Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen (diese kann für verschiedene Server-Versionen unterschiedlich sein) bei '›?îœM29*tÆ&Ëf•ÕÄH®[6ÿ€3µ= ", "2009-11-14", "€4lÓfÛcã¦", .... in Zeile 1

Allerdings werden die Zeichen hier anders dargestellt als in der Meldung


Hoffe ihr habt noch weitere Ideen.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#5

Re: MySQL : verschlüsselte Daten speichern

  Alt 19. Mär 2010, 17:02
Hallo...
Zitat:
Hoffe ihr habt noch weitere Ideen.
...immer nur die selbe: Verwende Parameter !
Die ganzen Probleme welche aus ' und '' resultieren, sind damit Geschichte.
  Mit Zitat antworten Zitat
rawi

Registriert seit: 16. Mär 2010
Ort: im Westen Deutschlands
38 Beiträge
 
Delphi 2010 Professional
 
#6

Re: MySQL : verschlüsselte Daten speichern

  Alt 20. Mär 2010, 00:58
Hallo Zusammen,

nun habe ich das Insert-Statement wie folgt abgeändert:
Delphi-Quellcode:
Format( 'insert into tblData (rechnername, rechnerno, ...
... help1, help2, aktdate) values
' +
         '(%s, %s, %s, ... , %s,%s, %s,%s, %s, %s)',
         [QuotedStr(edRechner.Text),
          QuotedStr(edRechnerNr.Text),
         ...
          QuotedStr(encode_data(memBemerkung.Text)),
          QuotedStr('help1'),
          QuotedStr('help2'),
          QuotedStr(strAktDate)]);
So hat es DeddyH hier (#322) empfohlen.
Ich denke mal so hat es auch haentschman gemeint.

Leider besteht das Problem nach wie vor.
Es liegt auch eindeutig an den verschlüsselten Werten, schreibe ich die Daten unverschlüsselt in das Insert-Statement funktioniert es ohne Probleme.

Vielleicht fällt ja doch noch jemandem etwas ein.

Danke und Gruß
rawi
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: MySQL : verschlüsselte Daten speichern

  Alt 20. Mär 2010, 01:13
Dekodiere sie noch der Verschlüssleung noch mit Base64 oder ähnlichen Methoden. Dann hast du nur darstellbare Zeichen, die auch gültig sind.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#8

Re: MySQL : verschlüsselte Daten speichern

  Alt 20. Mär 2010, 07:28
Zitat:
Das mit dem escapen mach ich schon im Quelltext. So wie ich das gelesen haben machen die Funktionen AnsiQuotedStr() oder mysql_real_escape_string() doch nichts anderes als den Text in "" zu setzen.
Das ist nicht ganz richtig. "mysql_real_escape_string" ersetzt einige Sonderzeichen durch eine Escape-Sequenz. Wichtig ist hier, dass das Escape-Zeichen "\" escaped wird, also zu "\\" gemacht wird. Auch sollten die Anführungszeichen korrekt escaped werden. Alle anderen Escape-Sequenzen sind eher kosmetischer Natur (Escape für #26, #13 und #10). In der aktuellen mysql.pas gibt es eine Delphi-Nachbildung der "mysql_real_escape_string". Diese heißt "EscapeString" und bietet zusätzlich den Vorteil mit dem Unicode-Delphi kompatible zu sein.
  Mit Zitat antworten Zitat
rawi

Registriert seit: 16. Mär 2010
Ort: im Westen Deutschlands
38 Beiträge
 
Delphi 2010 Professional
 
#9

Re: MySQL : verschlüsselte Daten speichern

  Alt 20. Mär 2010, 11:37
So, Tip von Luckie hat geholfen. Das ganze noch mit Base64 behandelt und es funktioniert.

Danke
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: MySQL : verschlüsselte Daten speichern

  Alt 20. Mär 2010, 12:43
Was ich nicht verstehe - warum verwendest du keine Parameter? Es wurd dir mehrfach nahe gelegt und du bist kein bisschen darauf eingegangen. Wenn du die Daten encodierst wird die Datenmenge auch mehr. Würdest du hingegen mit Parametern arbeiten könntest du die Daten so wie du sie wirklich vorliegen hast in der Datenbank speichern und könntest damit Rechenleistung für das encodieren und Speicherplatz in der Datenbank sparen.
Dein ignorieren der Parameter Vorschläge empfinde ich derzeit wie folgt: Jemand friert im Auto und anstelle einfach die eingebaute Heizung anzustellen kauft er sich eine zusätzliche Batterie, einen Transformator und eine Elektroheizung mit 220 Volt Anschluss. Baut dann die Rücksitzbank aus damit genügend Platz dafür ist und freut sich
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:49 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