FOK!forum / Digital Corner / C++: Eigen bestandsformaat maken
Hmaildinsdag 14 maart 2006 @ 13:18
Ik ga beginnen aan applicatie waarin je allerlei gevoelige informatie vast kunt leggen. Deze informatie word beveiligd met een wachtwoord, dus ik wil niet dat de info gewoon in notepad te openen is.
Wat ik dus wil is een eigen formaat die alleen mijn applicatie kan openen.
Net als dat je, wanneer je een PDF of een DOC in notepad opent, dan zie je ook allemaal onzin. Zo wil ik dat ook in mijn bestanden.
Maar hoe moet dit Ik kan een bestand maken met ios::binary, maar volgens mij zitten er niet zo heel veel verschillen tussen wel of geen ios::binary in je code gebruiken, wat betreft het openen van zo'n bestand in notepad.

Kan iemand me op weg helpen?
Lucilledinsdag 14 maart 2006 @ 13:19
Hint: je moet je bestand encrypten.
_Led_dinsdag 14 maart 2006 @ 13:30
Je "eigen bestandsformaat" maken is gewoon een kwestie van naar disk schrijven wat JIJ wilt.
Ik denk dat je eerst eens wat ervaring moet opdoen met programmeren in C++ en het werken met files...

Een paar leuke sites om rond te neuzen als je windows-apps wilt gaan maken zijn bv.
http://www.codeproject.com
http://www.codeguru.com
Developersrusdinsdag 14 maart 2006 @ 13:32
quote:
Op dinsdag 14 maart 2006 13:18 schreef Hmail het volgende:
Ik ga beginnen aan applicatie waarin je allerlei gevoelige informatie vast kunt leggen. Deze informatie word beveiligd met een wachtwoord, dus ik wil niet dat de info gewoon in notepad te openen is.
Wat ik dus wil is een eigen formaat die alleen mijn applicatie kan openen.
Net als dat je, wanneer je een PDF of een DOC in notepad opent, dan zie je ook allemaal onzin. Zo wil ik dat ook in mijn bestanden.
Maar hoe moet dit Ik kan een bestand maken met ios::binary, maar volgens mij zitten er niet zo heel veel verschillen tussen wel of geen ios::binary in je code gebruiken, wat betreft het openen van zo'n bestand in notepad.

Kan iemand me op weg helpen?
#include <fstream.h>

int main()
{
ifstream ifp( "stuff.in" );
ofstream ofp( "crap.out" );
int i;

ifp >> i;
ifp.close();

ofp << i * i;
ofp.close();

return( 0 );
}

Easy as 1,2,3!
electricitydinsdag 14 maart 2006 @ 13:33
quote:
Op dinsdag 14 maart 2006 13:19 schreef Lucille het volgende:
Hint: je moet je bestand encrypten.
dat is het enige juiste antwoord. afhankelijk van hoe amateuristisch alles is kun je zelf ff een filtertje maken die wat bitjes omwisselt, maar als je echte beveiliging wilt, kun je het beste een daarvoor bestaande library gebruiken.
electricitydinsdag 14 maart 2006 @ 13:34
quote:
Op dinsdag 14 maart 2006 13:32 schreef Developersrus het volgende:
Easy as 1,2,3!
wat een beveiliging joh!
Keiichidinsdag 14 maart 2006 @ 13:51
Openssl library gebruiken? Dan is het iig versleuteld
_Led_dinsdag 14 maart 2006 @ 14:06
Sorry maar als meneer niet weet "hoe ie z'n eigen bestandsformaat maakt" zou ik nog maar even niet over encryptie beginnen
Keiichidinsdag 14 maart 2006 @ 14:10
quote:
Op dinsdag 14 maart 2006 14:06 schreef L.Denninger het volgende:
Sorry maar als meneer niet weet "hoe ie z'n eigen bestandsformaat maakt" zou ik nog maar even niet over encryptie beginnen
Bij een eigen bestandsformaat zou je gewoon kunnen denken aan XML, wel zo handig aangezien er al mooie libraries daarvoor zijn geschreven. Ik heb vroeger ook eens eigen bestandsformaat gebruikt (had iets weg van CSV) en dat raakte op een gegeven moment corrupt.
_Led_dinsdag 14 maart 2006 @ 14:14
quote:
Op dinsdag 14 maart 2006 14:10 schreef Keiichi het volgende:

[..]

Bij een eigen bestandsformaat zou je gewoon kunnen denken aan XML, wel zo handig aangezien er al mooie libraries daarvoor zijn geschreven. Ik heb vroeger ook eens eigen bestandsformaat gebruikt (had iets weg van CSV) en dat raakte op een gegeven moment corrupt.
Prima, maar dan blijft m'n stelling nog steeds staan : als meneer dus niet weet hoe dat allemaal zit, zou ik nog maar niet over encryptie beginnen
Visitor.Qdinsdag 14 maart 2006 @ 14:20
Nou, als dat programma niets anders doet dan zijn gevoelige informatie opslaan, dan hoeft hij juist alleen maar iets over encryptie te weten, namelijk hoe hij codeert en decodeert (ok, en het wachtwoord verifieert). Het gecodeerde deel schrijf je weg als tekst en je bestand is onleesbaar voor derden, als je een beetje fatsoenlijke encryptie pakt natuurlijk, niet alles 1 letter opschruiven ofzo
Developersrusdinsdag 14 maart 2006 @ 14:24
quote:
Op dinsdag 14 maart 2006 14:20 schreef Visitor.Q het volgende:
Nou, als dat programma niets anders doet dan zijn gevoelige informatie opslaan, dan hoeft hij juist alleen maar iets over encryptie te weten, namelijk hoe hij codeert en decodeert (ok, en het wachtwoord verifieert). Het gecodeerde deel schrijf je weg als tekst en je bestand is onleesbaar voor derden, als je een beetje fatsoenlijke encryptie pakt natuurlijk, niet alles 1 letter opschruiven ofzo
Da's 1 formaat, ASCII
Visitor.Qdinsdag 14 maart 2006 @ 14:26
quote:
Op dinsdag 14 maart 2006 14:24 schreef Developersrus het volgende:

[..]

Da's 1 formaat, ASCII
Ja, dat wil hij toch?
Hmaildinsdag 14 maart 2006 @ 14:52
Wauw wat een reacties
L.Denninger: Ik heb een beetje ervaring met Windows programmeren, ik kan kleine simpele applicaties schrijven waar niemand wat aan heeft
Developersrus: Zo'n beveiliging is wel heel makkelijk te omzeilen het gaat om gevoelige informatie, dus het is niet de bedoeling dat de boel eenvoudig te lezen is
quote:
Op dinsdag 14 maart 2006 14:24 schreef Developersrus het volgende:
Da's 1 formaat, ASCII
Welke formaten zijn er nog meer?

Encyptie in combinatie met openssl is waarschijnlijk waar ik naar op zoek ben. Daar ga ik eens op googlen
Tot zover in ieder geval bedankt!
_Led_dinsdag 14 maart 2006 @ 15:35
Voorbeeldje :
http://www.codeproject.com/cpp/encrypt.asp
gdaydinsdag 14 maart 2006 @ 15:40
quote:
Op dinsdag 14 maart 2006 15:35 schreef L.Denninger het volgende:
Voorbeeldje :
http://www.codeproject.com/cpp/encrypt.asp
Ken ik jou toevallig uit de demoscene?
_Led_dinsdag 14 maart 2006 @ 15:42
quote:
Op dinsdag 14 maart 2006 15:40 schreef gday het volgende:

[..]

Ken ik jou toevallig uit de demoscene?
Da was ik nie, da was een negert !
Ja dus
Developersrusdinsdag 14 maart 2006 @ 15:43
quote:
Op dinsdag 14 maart 2006 14:52 schreef Hmail het volgende:
Wauw wat een reacties
L.Denninger: Ik heb een beetje ervaring met Windows programmeren, ik kan kleine simpele applicaties schrijven waar niemand wat aan heeft
Developersrus: Zo'n beveiliging is wel heel makkelijk te omzeilen het gaat om gevoelige informatie, dus het is niet de bedoeling dat de boel eenvoudig te lezen is
[..]

Welke formaten zijn er nog meer?

Encyptie in combinatie met openssl is waarschijnlijk waar ik naar op zoek ben. Daar ga ik eens op googlen
Tot zover in ieder geval bedankt!
http://nl.wikipedia.org/wiki/Bestandsformaat
Intrepiditydinsdag 14 maart 2006 @ 19:54
Op het moment dat je je data in een struct zet bijvoorbeeld en deze opslaat naar een binair (!!) bestand dan wordt het zonder de structuur van de struct te kennen al flink lastig er nog informatie uit te halen volgensmij.. pas nog een vorm van encryptie toe en volgensmij moet het dan redelijk veilig wezen
gdaydinsdag 14 maart 2006 @ 20:15
Jep, je moet inderdaad weten wat de datatypes zijn, hoe groot ze zijn, etc etc en daar ook nog eens nuttige informatie uit weten te halen. Nog een keer encryptie eroverheen en klaar.

Afhankelijk van hoe gevoelig die informatie is, zou ik kijken hoe sterk de encryptie moet zijn.
Intrepiditydinsdag 14 maart 2006 @ 20:18
Waarschuwing: Dat truucje werkt dan overigens weer niet bij open-source programma's
electricitydinsdag 14 maart 2006 @ 20:42
quote:
Op dinsdag 14 maart 2006 20:18 schreef Intrepidity het volgende:
Waarschuwing: Dat truucje werkt dan overigens weer niet bij open-source programma's
afgezien van het feit dat text embedded opslaan in een struct nogal onpraktisch is ivm fixed size beperkingen, is het in die vorm 'binair' nog net zo leesbaar als een gewoon stuk text. tenzij je unicode characters gebruikt. dan zit overal een spatie tussen. afhankelijk van de mate van gevoeligheid van de data zul je moeten wegen wat voor vorm van encryptie je gebruikt. maar als ik TS zo hoor praten kan de gevoeligheid nooit heel groot zijn, gezien zijn overduidelijke gebrekkige kennis van zaken.

security through obscurity is een slecht principe
gdaydinsdag 14 maart 2006 @ 20:44
.... en daarom dus een combinatie van de 2.

Maar idd, ik denk niet dat dit een applicatie zal worden voor bedrijfskritieke processen met zeer zeer gevoelige informatie....
Intrepiditydinsdag 14 maart 2006 @ 21:25
een simpele vorm van encryptie kan overigens wezen een getal als 'wachtwoord' vragen van een cijfer of 8 en je characters afwisselend verhogen met een van die cijfers...
Stel je hebt het woord huis en het wachtwoord 8134 krijg je als uitvoer:
h + 8 --> p
u + 1 --> v
i + 3 --> l
s + 4 --> w

pvlw is al een stuk minder bruikbaar als huis
Moet zelfs voor de beginnende programmeur te regelen zijn met een paar for-loopjes
Hmaildinsdag 21 maart 2006 @ 13:05
Ik ben er mee aan de slag gegaan, jullie tips hebben me behoorlijk geholpen!

Toch nog 1 vraag, en omdat ik geen reactie meer krijg in het Digital Feedback topic dump ik het maar hier
quote:
Op dinsdag 14 maart 2006 13:51 schreef Keiichi het volgende:
Openssl library gebruiken? Dan is het iig versleuteld
Ik ben hiermee bezig gegaan maar ik krijg openssl niet gecompileerd
Ik maak vaak gebruik van de Mingw compiler i.c.m Dev-C++, maar als ik de "installer" gebruik krijg ik op een gegeven moment deze melding:
quote:
gcc -o out\md2test tmp\md2test.o out\libssl.a out\libcrypto.a -lwsock32 -lgdi32

out\libcrypto.a(cryptlib.o)(.text+0xb19):cryptlib.c: undefined reference to `OPENSSL_ia32_cpuid'
mingw32-make: *** [out\md2test] Error 1
Weet iemand waar dit aan ligt?
Nektodinsdag 21 maart 2006 @ 13:39
Er worden niet genoeg libaries eringelinkt, of oude versies die bepaalde symbolen niet hebben. Als dat tijdens de installer gebeurt lijkt me dat echter een fout, maar kijk even of je misschien sommige andere packages moet installeren waar die installer van afhankelijk is.
Lightwoensdag 22 maart 2006 @ 13:57
quote:
Op dinsdag 14 maart 2006 21:25 schreef Intrepidity het volgende:
een simpele vorm van encryptie kan overigens wezen een getal als 'wachtwoord' vragen van een cijfer of 8 en je characters afwisselend verhogen met een van die cijfers...
Stel je hebt het woord huis en het wachtwoord 8134 krijg je als uitvoer:
h + 8 --> p
u + 1 --> v
i + 3 --> l
s + 4 --> w

pvlw is al een stuk minder bruikbaar als huis
Moet zelfs voor de beginnende programmeur te regelen zijn met een paar for-loopjes
Klinkt leuk, maar je moet alsnog zorgen dat er niets getoond wordt als het verkeerde wachttwoord wordt ingevoerd. Als er in het bestand "pvlw" staat en je voert als wachtwoord 9134 in dan hoor je dus niets te krijgen, en niet "guis". Anders is het wel heel makkelijk na te gaan dat je in de buurt zit qua wachtwoord.
ViPeRIIwoensdag 22 maart 2006 @ 14:08
Light, opzicht heb je gelijk, en dan zou je het dus nog een keer moeten doen.
Kijk maar naar PGP. Je hebt 1 public en 1 private key.
Met de public key kan je dus inderdaad de code:
8 1 3 4 voor huis. Als je dan dus nog een key hebt (de private) die er voor zorgt dat je bijvoorbeeld
9 8 6 13 (De code omgedraait +5 per cijfer) die je in moet voeren voordat je dus de public key kan laten zien, dan wordt het vrij moeilijk toch?
FallenAngel666donderdag 23 maart 2006 @ 12:26
Het blijft nog steeds een simpel substitutie cipher dat eenvoudig te kraken is, omdat ieder teken uit de plaintext wordt vervangen door precies één teken in de ciphertext.
Met behulp van frequentie analyse is het dan vrij eenvoudig om voor ieder teken in de ciphertekst te achterhalen wat de plaintext waarde is. Voor iedere taal is namelijk bekend wat de frequentie distributie is van alle letters uit het alfabet.
Gebruik maken van een doodsimpel transpositie cipher, waarbij de volgorge van de letters in het bericht worden omgedraaid voegt natuurlijk helemaal niets toe qua beveiliging

[ Bericht 0% gewijzigd door FallenAngel666 op 23-03-2006 12:44:29 ]
Hmaildonderdag 23 maart 2006 @ 16:15
Daarom wil ik dus m'n tekst eerst met md5 encrypten, en vervolgens die letters/cijfers coderen. Op dit moment heb ik dat gedaan door eerst een char in een int te converteren, vervolgens een (vaste) berekening er mee doen, en dan de int weer terug in een char te zetten zodat het op het eerste gezicht al onzin lijkt.
Maar openssl werkt niet mee
Keiichidonderdag 23 maart 2006 @ 16:28
quote:
Op donderdag 23 maart 2006 16:15 schreef Hmail het volgende:
Daarom wil ik dus m'n tekst eerst met md5 encrypten, en vervolgens die letters/cijfers coderen. Op dit moment heb ik dat gedaan door eerst een char in een int te converteren, vervolgens een (vaste) berekening er mee doen, en dan de int weer terug in een char te zetten zodat het op het eerste gezicht al onzin lijkt.
Maar openssl werkt niet mee
MD5 kun je niet decrypten checksummen is meer het woord
vbmotdonderdag 23 maart 2006 @ 16:30
quote:
Op donderdag 23 maart 2006 16:15 schreef Hmail het volgende:
Daarom wil ik dus m'n tekst eerst met md5 encrypten, en vervolgens die letters/cijfers coderen. Op dit moment heb ik dat gedaan door eerst een char in een int te converteren, vervolgens een (vaste) berekening er mee doen, en dan de int weer terug in een char te zetten zodat het op het eerste gezicht al onzin lijkt.
Maar openssl werkt niet mee
md5 lijkt me niet erg geschikt omdat het informatie weggooit. Dan moet je gaan brute-forcen om te decrypten.
Hmaildonderdag 23 maart 2006 @ 16:31
quote:
Op donderdag 23 maart 2006 16:28 schreef Keiichi het volgende:

[..]

MD5 kun je niet decrypten checksummen is meer het woord

Heb me er ook nog niet volledig in verdiept, dus ik ken die termen nog niet
edit:
Ik bedoel dus te zeggen dat ik de inhoud door md5 wil coderen, checksummen of wat dan ook
Vervolgens moet je om de inhoud van het bestand weer te geven een wachtwoord invoeren, en dan, als je het goeie wachtwoord ingeeft, dat hij dan de inhoud weer kan geven. Heet zoiets geen "seed"?

Of wil ik juist iets wat helemaal niet kan?

hmm volgens mij begin ik door te krijgen wat jullie bedoelen
Maar hoe moet dat dan? Hoe doet bijvoorbeeld OpenOffice het dan als je een document opslaat met wachtwoord?
FallenAngel666donderdag 23 maart 2006 @ 16:32
MD5 is een one-way cryptografische hashfunctie voor het genereren van 128-bit digest uit input van een willekeurige omvang. Niet bruikbaar voor encryptie / decryptie dus.

Edit: spuit 11
FallenAngel666donderdag 23 maart 2006 @ 16:36
quote:
Op donderdag 23 maart 2006 16:31 schreef Hmail het volgende:

Ik bedoel dus te zeggen dat ik de inhoud door md5 wil coderen, checksummen of wat dan ook
Vervolgens moet je om de inhoud van het bestand weer te geven een wachtwoord invoeren, en dan, als je het goeie wachtwoord ingeeft, dat hij dan de inhoud weer kan geven. Heet zoiets geen "seed"?

Of wil ik juist iets wat helemaal niet kan?
Wat jij wil kan wel, maar niet met MD5
Voor jouw doeleinden kan je het beste een symmetrisch encryptie algorithme pakken, zoals Blowfish, (3)DES, of AES (Rijndael).

[ Bericht 3% gewijzigd door FallenAngel666 op 23-03-2006 16:43:46 ]