C++ feste Werte

Hallo Leute,

ich hab eine Frage zu meinem Programm.

Und zwar brauch ich sowas wie veränderbare Konstanten :smile:.
Ich weiß das sich das wiederspricht aber ich muss irgendwie feste Werte in meinem Programm speichern.

Und zwar hab ich ein Programm wo ich etwas brauch das einen Wert speichern kann den er dann beim Starten wieder hat.
Das soll in etwas so aussehen:

Programm wird gestartet
Programm frägt Daten von einem HTTP Server ab
Programm lädt ein Datum von der HTTP Seite in eine Variable/Konstante
Programm beenden
Programm starten
Programm soll letztes geholtes Datum in einer Variable/Konstante habe

Jetzt ist es so das ich möchte das es beim Öffnen des Programms das Datum kennt. Also er lädt das Datum das sich natürlich jeden Tag ändert. Nun wird das Programm beendet. Wenn ich das dann nochmal starte möchte ich das er das letzte geholte Datum hat.

Natürlich könnte ich jetzt so vorgehen das er das Datum in eine Datei schreibt und dann jedes Mal beim öffnen des Programms die Datei auslese. Aber das würd ich gerne vermeiden da die Datei dann auch manipulierbar und lesbar wäre.

Würde mich über jeden Tipp sehr freuen.

MFG

mkbm

Hi mkbm,

prinzipiell musst du ja nur einen Wert speichern. Dafür gibt es grundsätzlich 2 Möglichkeiten, den Hauptspeicher oder eine externe Speichermöglichkeit wie Festplatte, USB-Stick, ein fremder Rechner (der wiederum die gleichen Möglichkeiten hat). Das Format, in dem dein Wert dann dort abgelegt wird, kannst du natürlich frei wählen - von Plain File über Datenbank bis zu wasauchimmer…
Du kannst es Dir also nur dann sparen, den Wert auf ein externes Medium zu speichern (egal in welcher Form), wenn du sicherstellen kannst, dass dein Programm immer im Speicher ist. Das wird aber spätestens dann schwierig, wenn jemand den Stecker zieht.

Wenn Du ein Problem damit hast, dass man den Wert dann dort auslesen (und manipulieren) könnte: Warum nicht verschlüsseln und mit einer Prüfsumme versehen? Eine Datenbank nur dafür zu bemühen erschiene mir dann doch etwas übertrieben.

Beste Grüße,
Martin

Hallo Martin,

also ich habe mich nun zu einer Verschlüsselung entschieden.

Allerdings ist mir noch nicht bekannt wie ich eine Verschlüsselung einbinden kann.
Bis jetzt habe ich eine Ceasar Verschlüsselung. Aber irgendwie scheint mir das nicht ganz so sicher.

Gibt es da eine Möglichkeit etwas besseres einfach einzubinden?
Natürlich sollte es auch wieder Entschlüsselt werden.

Dann würde ich gerne mit MD5 einen Hash erstellen. Ist das auch irgendwie möglich? Oder kann ich sogar die ganze Verschlüsselung mit MD5 durchführen?

Danke für die Hilfe.

MFG

mkbm

Hallo,

also ich habe mich nun zu einer Verschlüsselung entschieden.

Allerdings ist mir noch nicht bekannt wie ich eine
Verschlüsselung einbinden kann.
Bis jetzt habe ich eine Ceasar Verschlüsselung. Aber irgendwie
scheint mir das nicht ganz so sicher.

Cesar ist wirklich nicht sicher!!!

Gibt es da eine Möglichkeit etwas besseres einfach
einzubinden?

Wenn es kein normaler Text ist, den du schreibst, dann könnte vielleicht die „monoalphabetische Substitution“ ausreichen, d.h. die Vertauschung der Buchstaben gibst du an. Wenn du aber nen ganzen Text speichern willst, dann lässt sich das auch schnell knacken (über Häufigkeitsanalyse und Reihenfolge von Buchstabensequenzen). Ansonsten schau mal nach „Vigenere Verschlüsselung“, die ist etwas sicherer, aber auch nicht so kompliziert.

Natürlich sollte es auch wieder Entschlüsselt werden.

Dann würde ich gerne mit MD5 einen Hash erstellen. Ist das
auch irgendwie möglich? Oder kann ich sogar die ganze
Verschlüsselung mit MD5 durchführen?

Hash-Funktionen (MD5, SHA-1) sind Einwegfunktionen. Wenn du einen Hashwert bildest, kannst du aus diesem nicht den originalen Text bekommen. Sie dienen nur zum überprüfen, ob eine Datei/Zertifikat gültig ist oder nicht.

Gruss x303

Hallo mkbm,

also ich habe mich nun zu einer Verschlüsselung entschieden.

hatte ich mir auch erwartet.

Allerdings ist mir noch nicht bekannt wie ich eine
Verschlüsselung einbinden kann.
Bis jetzt habe ich eine Ceasar Verschlüsselung. Aber irgendwie
scheint mir das nicht ganz so sicher.

Also statt Cäsar kannst du beinahe schon Klartext verwenden. Es hängt natürlich etwas davon ab, was du verschlüsseln willst (also Text, Zahlen, …) und vor allem wie sensibel die Daten sind. Aber wenn du dir die Mühe machen willst, die Daten zu verschlüsseln, dann nehme ich an, dass du auch willst, dass das nicht jeder zweite entschlüsseln kann.

Gibt es da eine Möglichkeit etwas besseres einfach
einzubinden?

Sieh dir einmal GnuPG (http://www.gnupg.org/) bzw. die dort verwendeten Bibliotheken an. Ich hoffe das hilft Dir weiter.

Dann würde ich gerne mit MD5 einen Hash erstellen. Ist das
auch irgendwie möglich?

Ja. http://www.ben-newman.de/com/MD5.php
Unter Linux gibt es md5sum und auf Mac OS X md5. Unter Windows musst du das entweder „zu Fuß“ machen oder im Netz nach einer fertigen Implementierung suchen (Lizenz beachten, bei der angegebenen Seite steht da nichts drüber, was aber nicht heisst, dass du dir den Code so einverleiben darfst - also schön brav bleieben und anfragen…).

Oder kann ich sogar die ganze
Verschlüsselung mit MD5 durchführen?

Nein, MD5 geht nur in eine Richtung…

Danke für die Hilfe.

Ich hoffe es war eine solche,

Gruß
Martin

Hallo

Und zwar brauch ich sowas wie veränderbare Konstanten :smile:.
Ich weiß das sich das wiederspricht aber ich muss irgendwie
feste Werte in meinem Programm speichern.
Und zwar hab ich ein Programm wo ich etwas brauch das einen
Wert speichern kann den er dann beim Starten wieder hat.
Das soll in etwas so aussehen:
Programm wird gestartet
Programm frägt Daten von einem HTTP Server ab
Programm lädt ein Datum von der HTTP Seite in eine
Variable/Konstante
Programm beenden
Programm starten
Programm soll letztes geholtes Datum in einer
Variable/Konstante habe

Worin ist das Programm geschrieben, für
welches System?

Ich würde es so machen:

  • Daten im Programm in einen String od. Puffer schreiben

  • Puffer mit bzip2 komprimieren

  • ein 32’er Int-Feld anlegen, mir random()-int Werten füllen.

  • Eine Datei (binary) zum Schreiben öffnen

  • mit fwrite zuerst das 32’er int-Array reinschreiben,
    daran anschliessend den bzip2-komprimierten String

  • beim lesen umgekehrt, zuerst den 32’er int-Block lesen
    und verwerfen, dann die anschliessenden Werte lesen und
    durch bunzip2(string) schicken, fertig.

  • Vorteil: sehr starke „Obfuscation“, keine crypt-library
    nötig, bzip2 als lib für nahezu alle Systeme und Programmier-
    sprachen einfach verfügbar und einbindbar (auch für Skript-
    sprachen wie PHP, Python oder Perl).

  • Vorteil: größere Datenmengen werden gleich komprimiert
    abgelegt

  • Nachteil: für Kryptographieexperten zu knacken, weil
    der bzip2-Blockheader evtl. gefunden werden kann.

Grüße

CMБ