Verschlüsselte Datensätze entschlüsselt in DBGrid anzeigen
-
Hi,
du könntest sie auch einfach vorher inne Variable speichern. Ich geh mal davon aus dass die Funktionen encrypt(en) und decrypt(en) einen String zurückgeben?!
dann:
AnsiString Value = encrypten(DBEdit1->Text,"blabla"); ADOQuery4->Parameters->ParamByName("eteilnr")->Value=Value;mfg,micha
//Edit: ich wander aus, die deutsche Rechtschreibung steht mir nicht

-
@Christian Sonder:
Werde selbstverständlich die Funktionsnamen noch vernünftig benennen. War eher so´n quick ´n´ dirty tippeln.
@RandomAccess85:
werde das erst einmal mit den Variablen testen. Stelle mir das nicht so aufwendig vor, wie ein komplettes Grid zu malen.
Ja, die Funktionen geben AnsiString zurück.Jetzt zu dem nächsten Problem. Ich habe keinen Anfangspunkt, wie ich die Datenmenge, die erscheinen soll, vor der Anzeige abzufangen.
Sprich, wie ich nach dem "select * from import", zuerst in eine Variable, decrypt und danach ins Grid bekomme.
Hat da evtl. jemand ein paar Zeilen Anfang für mich, oder Stichwort...Lg Carsten
-
Christian meinte sicher OnDrawDataCell. Dort bekommst du direkt einen Zeiger auf das aktuelle Datensatz-Feld, das kannst du dann mit AsString etc. auslesen.
-
@Jansen:
Laut Hilfe ist OnDrawDataCell veraltet und man sollte statt dessen OnDrawColumnCell benutzen. (BCB6)@grandmasterb10:
Tue Dir selbst einen Gefallen: kein quick'n'dirty. Das macht nur mehr Arbeit. Wenn Du von Anfang an sauber planst und schreibst, ist alles einfacher. Von Fehlersuche über Wartung über irgendwann mal das Geschriebene nachvollziehen ... und Du sparst Dir hinterher das "Entdrecken".
-
Christian: Gut aufgepasst!

Also Column->Field->AsString etc.
-
Könnt Ihr mir nochmals eben helfen. Ich komme damit nicht klar.
Ich habe jetzt in dem Grid in das Ereignis OnDrawColumnCell reingeschrieben:Column->Field->AsString=decrypten(Column->Field->AsString,"12345");Beim Ausführen bekomme ich die Fehlermeldung, dass die Datenmenge nicht im Editier- oder Einfügemodus wäre.
-
Dein Code versucht, den entschlüsselten Text in die Datenbank zu schreiben.
Mach dich erstmal mit den OnDraw-Methoden vertraut, ein entsprechendes StringGrid-Beispiel findest du z.B. in der FAQ hier.
-
Ich habe jetzt alle StringGrid Beiträge aus der Faq mir angesehen, aber ich kann nicht erkennen, dass dort ein Zusammenhang mit meinem Problem beschrieben ist. Was ich dort eben finde, ist, wie ich auf einen Zustand reagiere und die Zellen einfärbe.
Ich kann nichts finden, dass mir etwas anderes angezeigt wird, wie in der Datenbank steht. Auch eine Suche durch andere Foren (Delphi) blieben erfolglos.Bitte nochmals um ein wenig Hilfe
Gruss Carsten
-
Hallo
Das Prinzip ist, das du den OnDraw..-Event des DBGrids dafür benutzen kannst um abhängig von einem Rohwert eine ganz eigene Ausgabe zu machen. In deinem Fall must du im Event überprüfen was für ein Feld gerade dran ist, bei einem verschlüsseltem Feld noch aus dem Rohwert den entschlüsselten Wert berechnen und danach den Ausgabewert normal manuell anzeigen lassen.
Allerdings muß ich sagen das ich manuell verschlüsselte Feldwerte für schlecht halte (außer gehashte Passwörter). Für die Übertragungssicherheit muß eine verschlüsselte Verbindung sowie Login/Password verwendet werden. Verschlüsselte Feldwerte hingegen verhindern nur das Sortieren, Suchen und Indizierung durch die Datenbank sowie verringert die Geschwindigkeit.
bis bald
akari
-
@akari:
Danke für die schnelle Antwort....und danach den Ausgabewert normal manuell anzeigen lassen.
das ist ja mein Problem. Wie kann ich den errechneten Wert mir manuell anzeigen lassen?
Allerdings muß ich sagen das ich manuell verschlüsselte Feldwerte für schlecht halte (außer gehashte Passwörter). Für die Übertragungssicherheit muß eine verschlüsselte Verbindung sowie Login/Password verwendet werden. Verschlüsselte Feldwerte hingegen verhindern nur das Sortieren, Suchen und Indizierung durch die Datenbank sowie verringert die Geschwindigkeit.
Ich finde die ganze Angelegenheit auch nicht so toll, habe aber keine andere Möglichkeit gefunden. Hintergrund ist, dass es eine Anwendung ist, die lokal auf Clients läuft, und für unterschiedliche Username/Passworte bei der Anmeldung unterschieldiche Daten zur Verfügung stehen. Es soll aber verhindert werden, dass jemand die Möglichkeit hat, auf den kompletten Datenbesatnd zuzugreifen. Ich hatte mich da für eine Access Datenbank entschieden, da sie wenigstens durch ein Passwort gesichert (im Gegensatz zu Firebird embedded und Co.) Ich wüsste nicht, wie ich es sonst hinbekäme, dass nicht jemand mit ein wenig Erfahrung durch ein wenig spielerei an alle Daten heran käme.
Gruss Carsten
-
grandmasterb10 schrieb:
Was ich dort eben finde, ist, wie ich auf einen Zustand reagiere und die Zellen einfärbe.
Und dass dort neben der Farbe auch der Text "von Hand" gezeichnet wird, ist dir nicht aufgefallen!?
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender, const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State) { ... DrawText(DBGrid1->Canvas->Handle, decrypt(Column->Field->AsString), -1, &Rect, DT_SINGLELINE | DT_VCENTER | 0); }
-
danke für Eure Hilfe.
Jetzt funktioniert es.
Habe eine andere Möglichkeit gewählt, da ich mit dem Ergebnis vonDrawText(DBGrid1->Canvas->Handle, decrypt(Column->Field->AsString), -1, &Rect, DT_SINGLELINE | DT_VCENTER | 0);nicht so zufrieden war (Text wurde über das eigentliche Feld gezeichnet und schaute hier und da noch raus.....)
Ich habe es jetzt überDBGrid1->Canvas->TextRect(Rect,Rect.Left,Rect.Top,decrypt(Column->Field->AsString,aes_key));gemacht, und habe das gewünschte Ergebnis. Mit Sicherheit funktioniert das geschriebene von Jansen auch, aber bevor ich mich hier noch mehr als Newbie oute....
Danke nochmals

Gruss Carsten