Eigene Dateieindungen, die nur vom Programm lesbar sind
-
- Beiträge: 18
- Registriert: Mo 14. Okt 2019, 10:24
- OS, Lazarus, FPC: Windows 10 (L 2.0.10 FPC 3.2.0)
- CPU-Target: 64Bit
Eigene Dateieindungen, die nur vom Programm lesbar sind
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!
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
Techno
-
- Lazarusforum e. V.
- Beiträge: 366
- Registriert: So 5. Mai 2019, 16:52
- OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 3.6, FPC 3.2.2)
- CPU-Target: x86_64, i386
- Wohnort: Bayreuth
Re: Eigene Dateieindungen, die nur vom Programm lesbar sind
Ä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.
Das geht dann nur über eine entsprechend hochwertige Verschlüsselung.
Tipp für PostgreSQL: www.pg-forum.de
Re: Eigene Dateieindungen, die nur vom Programm lesbar sind
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.
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.
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2807
- 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
Hier wäre es interessant etwas über den Hintergrund zu erfahren. Warum willst du das machen?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?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Beiträge: 1224
- 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
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.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?
Eine sinnvolle Möglichkeit Daten für andere unlesbar zu speichern: Du musst die Daten verschlüsseln. Freepascal bietet dazu schon einige Möglichkeiten.
-
- Beiträge: 18
- Registriert: Mo 14. Okt 2019, 10:24
- OS, Lazarus, FPC: Windows 10 (L 2.0.10 FPC 3.2.0)
- CPU-Target: 64Bit
Re: Eigene Dateieindungen, die nur vom Programm lesbar sind
Erst einmal vielen Dank für eure Antworten!
Das werde ich auf jeden Fall mal bei einigen meiner Dateien machen.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.
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.m.fuchs hat geschrieben:Hier wäre es interessant etwas über den Hintergrund zu erfahren. Warum willst du das machen?
Grüße,
Techno
Techno
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2807
- 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
Ok, aber warum sollen sie das nicht dürfen? Datenmanipulation ist in vielen Fällen möglich.Techno hat geschrieben:Ich speichere momentan beispielsweise Chatverläufe in Dateien. So können sie allerdings vom Benutzer einfach verändert werden.m.fuchs hat geschrieben:Hier wäre es interessant etwas über den Hintergrund zu erfahren. Warum willst du das machen?
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
- af0815
- Lazarusforum e. V.
- Beiträge: 6768
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Eigene Dateieindungen, die nur vom Programm lesbar sind
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.Techno hat geschrieben:Ich speichere momentan beispielsweise Chatverläufe in Dateien. So können sie allerdings vom Benutzer einfach verändert werden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 18
- Registriert: Mo 14. Okt 2019, 10:24
- OS, Lazarus, FPC: Windows 10 (L 2.0.10 FPC 3.2.0)
- CPU-Target: 64Bit
Re: Eigene Dateieindungen, die nur vom Programm lesbar sind
Wahrscheinlich nicht, wenn ich so überlege. Das hört sich wirklich alles ziemlich aufwendig an...m.fuchs hat geschrieben:Ist aber alles mit Aufwand verbunden. Lohnt sich dieser wirklich?
Vielen Dank allerdings für eure Antworten!
Grüße,
Techno
Techno
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Eigene Dateieindungen, die nur vom Programm lesbar sind
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.
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.
-
- Beiträge: 18
- Registriert: Mo 14. Okt 2019, 10:24
- OS, Lazarus, FPC: Windows 10 (L 2.0.10 FPC 3.2.0)
- CPU-Target: 64Bit
Re: Eigene Dateieindungen, die nur vom Programm lesbar sind
@Warf
Danke! Das werde ich ausprobieren!
Danke! Das werde ich ausprobieren!
Grüße,
Techno
Techno