Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Daten verschlüsselt speichern (https://www.delphipraxis.net/185251-daten-verschluesselt-speichern.html)

strom 26. Mai 2015 10:04

Datenbank: MariaDB • Version: ? • Zugriff über: MyConnect

Daten verschlüsselt speichern
 
Würde gerne Daten in der Database verschlüsselt speichern,
und im StringGrid wieder entschlüsselt darstellen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
i:integer;
begin
 //Test Text
 s:='Dies ist ein Test';
  for i:=1 to length(s) do begin
   s[i]:=Chr((Ord(s[i]) Xor (i*i-i))+(3+i)*(5+i));
    Memo1.text := s; // Test Memo1 Ansicht
  end;
   MyTAble1.Insert;
    MyTAble1.Edit;
    MyTable1.FieldByName('Eingabe').Text := s;
    MyTAble1.Post;
    MyTAble1.Refresh;
    DBGrid1.Refresh; // Daten verschlüsselt speichern
   for i:=1 to length(s) do begin
    s[i]:=Chr((Ord(s[i])-(3+i)*(5+i)) Xor (i*i-i));
  end;
  //Endschlüsseln und im StringGrid kopieren
   StringGrid1.FixedCols := 0;
   StringGrid1.FixedRows := 1;
   StringGrid1.ColCount := MyTable1.FieldCount;
   StringGrid1.RowCount := MyTable1.RecordCount+1;
   Memo2.text:= s; // Test Memo2 Ansicht
 for i := 0 to MyTable1.FieldCount - 1 do begin
  StringGrid1.Cells[i,0] := MyTable1.Fields[i].DisplayName;
   end;
    MyTable1.First;
     while not MyTable1.Eof do begin
      for i := 0 to MyTable1.FieldCount - 1 do begin
     StringGrid1.Cells[i, MyTable1.RecNo] := MyTable1.Fields[i].AsString;
    end;
   MyTable1.Next;
 end;
end;

vagtler 26. Mai 2015 10:10

AW: Daten verschlüsselt speichern
 
Wo ist die Frage?

Perlsau 26. Mai 2015 10:13

AW: Daten verschlüsselt speichern
 
Keine Ahnung, ob Maria-DB Verschlüsselung beherrscht, aber ich mache das immer so, wenn ich Tabelleninhalte verschlüsselt abspeichern will:

Im Programm arbeite ich mit einem ClientDataset. Beim Programmstart iterere ich durch die Original-Tabelle, entschlüssle die verschlüsselten Inhalte und speichere selbige im ClientDataSet. Beim Programmende speichere ich die im ClientDataSet enthaltenen Daten wieder in die Original-Tabelle, wobei die relevanten Spalten wieder verschlüsselt werden. Während des Programmlaufs arbeite ich ausschließlich mit dem ClientDataSet, das ich dann auch dem entsprechenden DataSource zuweise, um damit ein DBGrid zu "füttern".

Alternativ könnte man auch im Original-Dataset ein zusätzliches Feld (Feldeditor) anlegen und in OnGetText dieses neuen Feldes den entschlüsselten Inhalt bereitstellen und in OnChange wieder speichern.

War es das, was du wissen wolltest?

frankyboy1974 26. Mai 2015 10:19

AW: Daten verschlüsselt speichern
 
Zitat:

Wo ist die Frage?
Die hat er verschlüsselt in der Datenbank gespeichert!!!:lol:

fillibuster 26. Mai 2015 10:25

AW: Daten verschlüsselt speichern
 
Zitat:

Zitat von Perlsau (Beitrag 1303017)
Keine Ahnung, ob Maria-DB Verschlüsselung beherrscht, ...

MariaDB unterstützt Verschlüsselung: https://mariadb.com/kb/en/mariadb/table-encryption/

Popov 26. Mai 2015 10:30

AW: Daten verschlüsselt speichern
 
strom, der Wort-Minimalist ist wieder da ;)

Also strom, wenn es nichts kompliziertes sein muss, die Verschlüsselung mehr ein Sichtschutz als wirkliche Verschlüsselung sein soll, dann würde ich eine XOR Verschlüsselung empfehlen. Die ist sehr einfach und lässt sich nach paar Versuchen relativ schnell knacken, aber wie gesagt, sie ist sehr einfach. Und sie reicht allemal dazu den Text unleserlich zu machen.

Mavarik 26. Mai 2015 10:34

AW: Daten verschlüsselt speichern
 
Zitat:

Zitat von Popov (Beitrag 1303024)
Also strom, wenn es nichts kompliziertes sein muss, die Verschlüsselung mehr ein Sichtschutz als wirkliche Verschlüsselung sein soll, dann würde ich eine XOR Verschlüsselung empfehlen. Die ist sehr einfach und lässt sich nach paar Versuchen relativ schnell knacken, aber wie gesagt, sie ist sehr einfach. Und sie reicht allemal dazu den Text unleserlich zu machen.

Nicht nur das... Ein XOR gilt schon als Verschlüsselung und ein Ausspähen der Daten gilt schon als reverse Engineering und ist strafbar...

Popov 26. Mai 2015 10:44

AW: Daten verschlüsselt speichern
 
Ich hab gerade seinen Code überflogen und glaube, dass er schon selbst auf XOR gekommen ist. Ich vermute, eindeutig kann ich es nicht sagen, dass die Frage an das Forum ist, ob die Verschlüsselung ok ist. Warum storm sich aber immer so kurz mit seinen Fragen hält, weiß ich nicht. Meine beste Theorie bisher ist, dass er noch einen alten CompuServe Account für 5 DM die Stunde hat und einen 14,4 kB/s Modem. Da hält man sich knapp, denn Zeit kostet Geld.

vagtler 26. Mai 2015 11:32

AW: Daten verschlüsselt speichern
 
Warum sollte er sich auch um ein soziales Verhalten bemühen? Er bekommt doch genügend Antworten auf dem Silbertablett serviert.

strom 26. Mai 2015 11:37

AW: Daten verschlüsselt speichern
 
Entschuldigung, hier bin ich wieder!

Die Daten werden verschlüsselt in der Datenbank abgelegt,
und auch wieder ins StringGrid kopiert!

Leider sind die Daten im StringGrid noch verschlüsselt!

baumina 26. Mai 2015 11:45

AW: Daten verschlüsselt speichern
 
Ich denke mal, dass du den Code zusammengesammelt und -kopiert hast. Du benutzt z.B. i in for-Schleifen, die nochmals eine for-Schleife mit i hat. Da weiß das arme Programm gar nimmer was nun i für einen Wert beinhalten soll. EDIT : Ach ne, stimmt ja gar nicht, ist nur ne sauschlechte Code-Formatierung.

Außerdem entschlüsselst du nicht beim Füllen der StringGrid.

ringli 26. Mai 2015 11:50

AW: Daten verschlüsselt speichern
 
Zitat:

Zitat von strom (Beitrag 1303039)
Leider sind die Daten im StringGrid noch verschlüsselt!

Klar, du entschlüsselst sie ja auch nicht.

strom 26. Mai 2015 11:52

AW: Daten verschlüsselt speichern
 
Danke für Eure Hilfe :-)

Jetzt geht es! Könnte man was verbessern?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
i:integer;
begin
 //Test Text
 s:='Dies ist ein Test';
  for i:=1 to length(s) do begin
   s[i]:=Chr((Ord(s[i]) Xor (i*i-i))+(3+i)*(5+i));
    Memo1.text := s; // Test Memo1 Ansicht
  end;
   MyTAble1.Insert;
    MyTAble1.Edit;
    MyTable1.FieldByName('Eingabe').Text := s;
    MyTAble1.Post;
    MyTAble1.Refresh;
    DBGrid1.Refresh; // Daten verschlüsselt speichern
   for i:=1 to length(s) do begin
    s[i]:=Chr((Ord(s[i])-(3+i)*(5+i)) Xor (i*i-i));
  end;
  //Endschlüsseln und im StringGrid kopieren
   StringGrid1.FixedCols := 0;
   StringGrid1.FixedRows := 1;
   StringGrid1.ColCount := MyTable1.FieldCount;
   StringGrid1.RowCount := MyTable1.RecordCount+1;
   Memo2.text:= s; // Test Memo2 Ansicht
 for i := 0 to MyTable1.FieldCount - 1 do begin
  StringGrid1.Cells[i,0] := MyTable1.Fields[i].DisplayName;
   end;
    MyTable1.First;
     while not MyTable1.Eof do begin
      for i := 0 to MyTable1.FieldCount - 1 do begin
     StringGrid1.Cells[0, MyTable1.RecNo] := MyTable1.FieldByName('ID').Text;
     StringGrid1.Cells[1, MyTable1.RecNo] := s;//MyTable1.Fields[i].AsString;
    end;
   MyTable1.Next;
 end;
end;

Perlsau 26. Mai 2015 12:11

AW: Daten verschlüsselt speichern
 
Zitat:

Zitat von vagtler (Beitrag 1303037)
Warum sollte er sich auch um ein soziales Verhalten bemühen? Er bekommt doch genügend Antworten auf dem Silbertablett serviert.

Tja, manchmal kommt man nicht umhin, Perlen vor die Säue zu werfen :stupid:

Der schöne Günther 26. Mai 2015 12:32

AW: Daten verschlüsselt speichern
 
Zitat:

Zitat von Perlsau (Beitrag 1303054)
Tja, manchmal kommt man nicht umhin, Perlen vor die Säue zu werfen :stupid:

Großer Gott, jetzt verstehe ich den Nutzernamen endlich! :!:

Ehrlich.

Captnemo 26. Mai 2015 12:33

AW: Daten verschlüsselt speichern
 
Kleiner Tipp:

Pack dir die XOR-Verschlüsselung in eine kleine Funktion ala:
Delphi-Quellcode:
Function StrXor(Str: string; key: integer): string;
Da du XOR-Verschlüsselst kannst du das so machen, dass sowohl für die Verschlüsselung als auch für die Entschlüsselung den gleichen Code benutzt.

Diese Funktionen nutzt du dann ein deine Procedure. Denn so, wie du es zur Zeit machst, ist das Käse und in einem halben Jahr steigst du da selber nicht mehr durch.

Captnemo 26. Mai 2015 12:34

AW: Daten verschlüsselt speichern
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1303060)
Großer Gott, jetzt verstehe ich den Nutzernamen endlich! :!:

Ehrlich.

Ich lach mich schlapp :lol::lol::lol:

Mavarik 26. Mai 2015 12:41

AW: Daten verschlüsselt speichern
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1303060)
Zitat:

Zitat von Perlsau (Beitrag 1303054)
Tja, manchmal kommt man nicht umhin, Perlen vor die Säue zu werfen :stupid:

Großer Gott, jetzt verstehe ich den Nutzernamen endlich! :!:

Ehrlich.

Jo und ich dachte es kommt von Perlsau

Perlsau 26. Mai 2015 12:44

AW: Daten verschlüsselt speichern
 
Ich kann doch gar kein Perl ... 8-)

Captnemo 26. Mai 2015 12:56

AW: Daten verschlüsselt speichern
 
Zitat:

Zitat von Perlsau (Beitrag 1303065)
Ich kann doch gar kein Perl ... 8-)

Ach was, ein bisschen Perl kann jeder :D

Luckie 26. Mai 2015 13:01

AW: Daten verschlüsselt speichern
 
Kommt bitte wieder zurück zum Thema, wenn es dazu noch was zu sagen gibt.

AlexII 26. Mai 2015 13:31

AW: Daten verschlüsselt speichern
 
Gibt es noch irgendwelche "Anfänger"-Verschlüsselungen außer XOR, die etwas schwieriger zu knacken sind?

Perlsau 26. Mai 2015 13:34

AW: Daten verschlüsselt speichern
 
Nimm doch einfach was Fertiges und verschlüssle damit. Gibt genug Freeware-Komponenten zum Verschlüsseln.

AlexII 26. Mai 2015 13:38

AW: Daten verschlüsselt speichern
 
Zitat:

Zitat von Perlsau (Beitrag 1303074)
Nimm doch einfach was Fertiges und verschlüssle damit. Gibt genug Freeware-Komponenten zum Verschlüsseln.

War nur einer Horizonterweiterungsfrage. :coder:

Popov 26. Mai 2015 13:57

AW: Daten verschlüsselt speichern
 
Meine Meinung zur Verschlüsselung: entweder man macht es richtig oder sollte gar nicht erst anfangen. Nur ein bisschen verschlüsseln ist so wie ein bisschen schwanger sein. Xor ist etwas simples, für mich eher ein Sichtschutz als Verschlüsselung. Der Text wird unlesbar gemacht, nicht wirklich verschlüsselt. Somit stellt sich deine Frage eigentlich gar nicht richtig, denn entweder du nimmst die beste Verschlüsselung die es gibt oder es dir egal ob man es knacken kann. Somit gibt es eigentlich keine Verschlüsselungen für Anfänger. Denn das würde bedeuten: ich hab was dagegen, dass meine Verschlüsselung in 30 Minuten geknackt wird, aber da ich ein Anfänger bin und keinen unknackbaren Code nutzen kann, akzeptiere ich eine Anfänger-Verschlüsselung die man in 60 Minuten knacken kann.

Nur für die Vollständigkeit, noch simpler als oben ist wohl ROT13

Mavarik 26. Mai 2015 14:02

AW: Daten verschlüsselt speichern
 
Zitat:

Zitat von AlexII (Beitrag 1303075)
Zitat:

Zitat von Perlsau (Beitrag 1303074)
Nimm doch einfach was Fertiges und verschlüssle damit. Gibt genug Freeware-Komponenten zum Verschlüsseln.

War nur einer Horizonterweiterungsfrage. :coder:

Verschlüsselung ist doch immer so...
Wie groß ist der Aufwand etwas zu knacken und wer hat Interesse daran.

eine XOR Geschichte reicht für den Gesetzgeber und für Endanwender
eine XOR+Lauflänge für Anfänger
eine Caesar-Verschlüsselung können die meisten auch noch "lesen"
bei einem Tabellentauscher wird es schon schwieriger...
und eine Kombination von dem ein oder anderen macht es wahrscheinlich für die hälfte aller Programmierer schon zu schwierig...
vorausgesetzt der Programmcode ist nicht zu einfach in der Exe enthalten... (Antidebug hack usw.)

Wenn Du dann noch die Verschlüsselung bei jedem Programmstart änderst oder Zeitabhängig machst...
Ist der Aufwand schon fast so groß, dass du eine AES oder Vergleichbares nehmen kannst...

Mavarik

Mavarik 26. Mai 2015 14:08

AW: Daten verschlüsselt speichern
 
Zitat:

Zitat von Popov (Beitrag 1303079)
bedeuten: ich hab was dagegen, dass meine Verschlüsselung in 30 Minuten geknackt wird, aber da ich ein Anfänger bin und keinen unknackbaren Code nutzen kann, akzeptiere ich eine Anfänger-Verschlüsselung die man in 60 Minuten knacken kann.

Na das möchte ich sehen...

Simples Beispiel:

Datenfelder per Offset Tabelle in unterschiedlicher Reihenfolge in einem Stream speichern den als gepackten Stream mit einen
Tabellentauscher / XOR + Lauflänge... Und nach jedem Start wechsle ich die Tausch-Tabellen und die Offset-Tabelle...

Das will ich in 60 Min sehen... (ohne den Programmcode zu debuggen)

Mavarik

p80286 26. Mai 2015 16:52

AW: Daten verschlüsselt speichern
 
Zitat:

Zitat von strom (Beitrag 1303015)
Delphi-Quellcode:
    MyTAble1.Insert;
    MyTAble1.Edit;
    MyTable1.FieldByName('Eingabe').Text := s;
    MyTAble1.Post;
    MyTAble1.Refresh;    
    DBGrid1.Refresh; // Daten verschlüsselt speichern
   for i:=1 to length(s) do begin
    s[i]:=Chr((Ord(s[i])-(3+i)*(5+i)) Xor (i*i-i));
  end;

Hab ich da vllt. etwas falsch verstanden?
hier wird der Inhalt von s doch erst in der DB gespeichert, und dann verschlüsselt oder nicht?

Gruß
K-H

Perlsau 26. Mai 2015 17:24

AW: Daten verschlüsselt speichern
 
Logisch: Nach poschd isch de Käs gesse :)

Eins dieser typischen Copy&Paste-Beispiele, ohne zu wissen, was der Code tatsächlich macht?
Bleibt mir bloß mit euren Grundlagen weg, das hab ich nicht nötig!

Insider2004 26. Mai 2015 19:37

AW: Daten verschlüsselt speichern
 
XOR ist keine Verschlüsselung, sondern eine Krankheit. Knackbar in 0.1 sec.

himitsu 26. Mai 2015 19:49

AW: Daten verschlüsselt speichern
 
Nein, ist es nicht. XOR ist mindestens genauso sicher, wie jede andere Verschlüsselung.
Ordentlich implementiert ist es eine der sichersten Verschlüsselungen überhaupt und alles Andere kann maximal noch genauso gut, aber nicht besser sein.

Mit einem guten OTP verschlüsselt, welcher mindestens genauso lang ist, wie die zu verschlüsselnden Daten, ist es praktisch zu 100% unknackbar.

BUG 26. Mai 2015 20:36

AW: Daten verschlüsselt speichern
 
Zitat:

Zitat von himitsu (Beitrag 1303114)
XOR ist mindestens genauso sicher, wie jede andere Verschlüsselung.

Die Diskussion ist müßig, weil XOR einfach eine bitweise Operation ist. Womit man verxodert ist entscheidend.
XOR ließe sich völlig unproblematisch durch eine byteweise Addition modulo 256 ersetzen, das ist bloß nicht so effizient in Hardware umzusetzen*.

Zitat:

Zitat von himitsu (Beitrag 1303114)
Mit einem guten OTP verschlüsselt, welcher mindestens genauso lang ist, wie die zu verschlüsselnden Daten, ist es praktisch zu 100% unknackbar.

Das mit dem OTP kann ich nicht mehr hören. Ein echtes OTP ist sogar theoretisch 100% unknackbar ... aber eben alles andere als praktisch :stupid:


* Mit Vorsicht genieße, könnte mich auch irren :mrgreen:

AlexII 26. Mai 2015 22:14

AW: Daten verschlüsselt speichern
 
Was ist OTP?

Perlsau 26. Mai 2015 22:23

AW: Daten verschlüsselt speichern
 
One-Time-Pad
Wußte ich bis eben auch nicht, aber keine 5 Sekunden später hat's mir Wikipedia erzählt :-D

himitsu 26. Mai 2015 22:27

AW: Daten verschlüsselt speichern
 
One-Time-Pad (Einmalverschlüsselung)
Praktisch eine große Passwortdatei, bzw. ein großer Schlüssel, für die Verschlüsselung, der auch nur ein einziges mal verwendet werden darf.
Jedes Byte der Daten wird mit einem eigenen Byte des Schlüssels verschlüsselt. Da keiner die einzelnen Bytes kennt, kann man auch nicht die Daten entschlüsseln.

Jedes Bit ist möglichst zufällig, keine Bits/Bytes lassen sich aus Anderen berechnen und man kann keine Zusammenhänge, Muster oder sonstwas zwischen einzelnen Bytes erkennen (gibt ja auch Keine).

Captnemo 26. Mai 2015 22:35

AW: Daten verschlüsselt speichern
 
Wie stark ich verschlüsseln will/muss hängt doch immer davon ab, vor wem ich den Dateninhalt verbergen will.

Will ich den Inhalt eines Zimmers vor meinen Kindern schützen, brauche ich keine Panzertür. Will ich mich aber gegen professionelle Einbrecher schützen, reicht eine Zimmertür sicherlich nicht aus.

himitsu 26. Mai 2015 22:45

AW: Daten verschlüsselt speichern
 
Kann man doch alles machen :)

z.B. einfach immer nur das 1. Bit drehen (XOR) oder vielleicht das 6. Bit ($20 ... das ergibt ein echt geiles Verschlüsselungsergebnis :lol:)
oder jedes Byte mit dem Ergebnis des Bytes davor verXORen
oder das kombinieren und noch paar Bits verschiben, bissl multiplizieren, dividieren, addieren usw.
und schon wird aus dem XOR ein Cäsar, Enigma, AES, RSA, RC4, Rot13 oder sonstwas.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:35 Uhr.

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