Eigene Dateieindungen, die nur vom Programm lesbar sind

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
Techno
Beiträge: 18
Registriert: Mo 14. Okt 2019, 10:24
OS, Lazarus, FPC: Windows 10 (L 2.0.8 FPC 3.0.4)
CPU-Target: 32Bit

Eigene Dateieindungen, die nur vom Programm lesbar sind

Beitrag von Techno »

Guten Tag,

ich programmiere ein Chatprogramm und speichere einige Daten in Dateien. Momentan sind es .txt-Dateien, die von jedem Benutzer gelesen werden können. Wie kann ich eine eigene Dateiendung erstellen, die nur von meinem Programm und nicht von anderen Nutzern auf dem PC gelesen werden kann?

Vielen Dank im Voraus für Antworten!
Grüße,

Techno

Ich934
Lazarusforum e. V.
Beiträge: 154
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: Eigene Dateieindungen, die nur vom Programm lesbar sind

Beitrag von Ich934 »

Ähm, ich glaub du hast hier ein grundlegendes Verständnisproblem. Eine Dateiendung verhindert nicht, dass ein anderes Programm den Inhalt lesen kann.

Das geht dann nur über eine entsprechend hochwertige Verschlüsselung.
Tipp für PostgreSQL: www.pg-forum.de

wp_xyz
Beiträge: 3358
Registriert: Fr 8. Apr 2011, 09:01

Re: Eigene Dateieindungen, die nur vom Programm lesbar sind

Beitrag von wp_xyz »

Dafür musst du ein binäres Dateiformat wählen, das heißt, du musst z.B. den Integer 253 in die Datei schreiben, nicht aber den String '253'.

Ich würde dir unbedingt davon abraten. Denn irgendwann wirst du Probleme mit der Datei haben, und da wirst du dankbar sein, dass es andere Programme gibt, die deine Datei lesen können. Auch wirst du irgendwann das Dateiformat erweitern - ein einziges eingefügtes Byte macht die ganze Datei unlesbar, und du musst den Reader entsprechend anpassen.

Daher würde ich unbedingt dazu raten, bei irgendwie text-basierten Datein zu bleiben. In der Regel sind das einfache txt-Dateien, die du nach eigenen Regeln erstellst, xml-Dateien oder meinetwegen auch sowas wie die ini-Dateien von Windows. Lazarus stellt gute Tools bereit, um diese zu lesen. Bei Problemen kannst du die Dateien auch in den System-Texteditor laden und kannst immer noch erkennen, was in der Datei steht.

Sinnvoller erscheint mir die Frage: Wie kann ich mein Programm dazu bringen, dass es nur eigne Dateien öffnet? Dafür kannst du einfach eine eigene Endung vergeben. Eine einfache Text-Datei wird dann nicht mehr automatisch mit dem System-Text-Editor geöffnet, bloß weil sie die Endung .txt hat. Du kannst auch daran denken, an den Anfang der Datei eine Kennung zu schreiben, die für dein Programm spezifisch ist. Beim Lesen wird zuerst die Kennung geprüft, und wenn diese nicht vorhanden ist, handelt es sich um eine Datei eines anderen Programms. Genauso kannst du so eine Versionsnummer unterbringen, denn das Problem mit verschiednen Versionen gibt es natürlich auch bei Text-Dateien.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2311
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Eigene Dateieindungen, die nur vom Programm lesbar sind

Beitrag von m.fuchs »

Techno hat geschrieben:ich programmiere ein Chatprogramm und speichere einige Daten in Dateien. Momentan sind es .txt-Dateien, die von jedem Benutzer gelesen werden können. Wie kann ich eine eigene Dateiendung erstellen, die nur von meinem Programm und nicht von anderen Nutzern auf dem PC gelesen werden kann?

Hier wäre es interessant etwas über den Hintergrund zu erfahren. Warum willst du das machen?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Timm Thaler
Beiträge: 1107
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Eigene Dateieindungen, die nur vom Programm lesbar sind

Beitrag von Timm Thaler »

Techno hat geschrieben:ich programmiere ein Chatprogramm und speichere einige Daten in Dateien. Momentan sind es .txt-Dateien, die von jedem Benutzer gelesen werden können. Wie kann ich eine eigene Dateiendung erstellen, die nur von meinem Programm und nicht von anderen Nutzern auf dem PC gelesen werden kann?


Gar nicht. Man kann jede Datei lesen, egal welche Endung die hat, wenn man will. Man kann auch Binärformat lesen, wenns denn unbedingt sein muß bekommt man die Dateistruktur raus.

Eine sinnvolle Möglichkeit Daten für andere unlesbar zu speichern: Du musst die Daten verschlüsseln. Freepascal bietet dazu schon einige Möglichkeiten.

Techno
Beiträge: 18
Registriert: Mo 14. Okt 2019, 10:24
OS, Lazarus, FPC: Windows 10 (L 2.0.8 FPC 3.0.4)
CPU-Target: 32Bit

Re: Eigene Dateieindungen, die nur vom Programm lesbar sind

Beitrag von Techno »

Erst einmal vielen Dank für eure Antworten!

wp_xyz hat geschrieben:Sinnvoller erscheint mir die Frage: Wie kann ich mein Programm dazu bringen, dass es nur eigne Dateien öffnet? Dafür kannst du einfach eine eigene Endung vergeben. Eine einfache Text-Datei wird dann nicht mehr automatisch mit dem System-Text-Editor geöffnet, bloß weil sie die Endung .txt hat. Du kannst auch daran denken, an den Anfang der Datei eine Kennung zu schreiben, die für dein Programm spezifisch ist. Beim Lesen wird zuerst die Kennung geprüft, und wenn diese nicht vorhanden ist, handelt es sich um eine Datei eines anderen Programms. Genauso kannst du so eine Versionsnummer unterbringen, denn das Problem mit verschiednen Versionen gibt es natürlich auch bei Text-Dateien.


Das werde ich auf jeden Fall mal bei einigen meiner Dateien machen.

m.fuchs hat geschrieben:Hier wäre es interessant etwas über den Hintergrund zu erfahren. Warum willst du das machen?


Ich speichere momentan beispielsweise Chatverläufe in Dateien. So können sie allerdings vom Benutzer einfach verändert werden. Ich kenne mich nicht gut mit Datenbanken aus und weiß nicht, ob ich die Daten besser dort speichern sollte. Allerdings ist das Programm noch in der Anfangsphase, sodass es bis jetzt noch nicht zwingend notwendig war, die Daten anders zu speichern.
Grüße,

Techno

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2311
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Eigene Dateieindungen, die nur vom Programm lesbar sind

Beitrag von m.fuchs »

Techno hat geschrieben:
m.fuchs hat geschrieben:Hier wäre es interessant etwas über den Hintergrund zu erfahren. Warum willst du das machen?

Ich speichere momentan beispielsweise Chatverläufe in Dateien. So können sie allerdings vom Benutzer einfach verändert werden.

Ok, aber warum sollen sie das nicht dürfen? Datenmanipulation ist in vielen Fällen möglich.
Um das wirksam zu verhindern könntest du die Protokolle auf dem Server ablegen. Oder in einer Datei und diese dann signieren. Oder gleich in eine Blockchain.

Ist aber alles mit Aufwand verbunden. Lohnt sich dieser wirklich?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4306
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Eigene Dateieindungen, die nur vom Programm lesbar sind

Beitrag von af0815 »

Techno hat geschrieben:Ich speichere momentan beispielsweise Chatverläufe in Dateien. So können sie allerdings vom Benutzer einfach verändert werden.

Die Frage ist, willst du nur Änderungen erkennen oder die Änderung verhindern. Bei ersteren könnten die Prüfsummen dazu gespeichert reichen, bei letzteres nur dann wenn du die Daten verschlüsselt. Letztlich ist es immer so, wieviel Aufwand willst du Treiben ? Letztlich ist alles knackbar, die Frage ist immer nur wieviel Aufwand von beiden Seiten investiert wird.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Techno
Beiträge: 18
Registriert: Mo 14. Okt 2019, 10:24
OS, Lazarus, FPC: Windows 10 (L 2.0.8 FPC 3.0.4)
CPU-Target: 32Bit

Re: Eigene Dateieindungen, die nur vom Programm lesbar sind

Beitrag von Techno »

m.fuchs hat geschrieben:Ist aber alles mit Aufwand verbunden. Lohnt sich dieser wirklich?

Wahrscheinlich nicht, wenn ich so überlege. Das hört sich wirklich alles ziemlich aufwendig an...

Vielen Dank allerdings für eure Antworten!
Grüße,

Techno

Warf
Beiträge: 1504
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: MacOS | Win 10 | Linux
CPU-Target: x86_64
Wohnort: Aachen

Re: Eigene Dateieindungen, die nur vom Programm lesbar sind

Beitrag von Warf »

Also grundsätzlich macht es bei nem chat definitiv sinn seine Nachrichten zu verschlüsseln (Beispiel, man teilt sich den PC mit jemand anderem, dann möchte man nicht unbedingt das der ungefragt die chatnachrichen lesen kann).

Daher würde ich dir empfehlen: Lass den nutzer ein Passwort festlegen und verschlüssel die daten dann mit dem Passwort. Ganz einfach zu benutzen ist dafür DCPCrypt und als Cipher (Verschlüsselungsalgorithmus) würde ich dir Rijandael (AES) empfehlen. Ist schnell und Sicher.

Techno
Beiträge: 18
Registriert: Mo 14. Okt 2019, 10:24
OS, Lazarus, FPC: Windows 10 (L 2.0.8 FPC 3.0.4)
CPU-Target: 32Bit

Re: Eigene Dateieindungen, die nur vom Programm lesbar sind

Beitrag von Techno »

@Warf

Danke! Das werde ich ausprobieren!
Grüße,

Techno

Antworten