textdatei verschlüsseln
-
nwp2 schrieb:
ich habe da meine Standardfunktion
also bei größeren dateien hauts dir doch den ram um die ohren? wenn schon sowas dann mit callback auf teilstrings.
lg lolo
-
nwp2 schrieb:
noobLolo schrieb:
reicht natürlich auch so, langsam schäm ich mich dass ich hier immer so ne grüze post
Tja, dafür kann man sich registieren und seine Grütze wieder löschen
noch hab ich die hoffnung dass ichs irgendwann besser mach, sollte das noch öfter vorkommen werd ich deinem vorschlag folgen.
-
hab mich mal drangesetzt und nen funktionierenden ökonomischen script geschriebn er verschiebt die Buchstaben jeweils um eine Stelle:
#include <iostream> using namespace std; FILE*fsrc,*ftar; string s; int main() { int choice; cout<<"Verschluesseln: 1\nEntschluesseln: 2\n"; cin>>choice; if(choice==1) { cout<<"Dateiname:"; cin>>s; fsrc=fopen(s.data(),"r+"); s.append(".key"); ftar=fopen(s.data(),"w+"); cout<<"\n"; char Buchstabe; while(1) { fscanf(fsrc,"%c",&Buchstabe); if((++Buchstabe)>254) Buchstabe=0; if(feof(fsrc)) break; fprintf(ftar,"%c",Buchstabe); } fclose(fsrc);fclose(ftar); } else if(choice==2) { cout<<"Dateiname:"; cin>>s; fsrc=fopen(s.data(),"r+"); cout<<"\n"; s.erase(s.length()-4,4); ftar=fopen(s.data(),"w+"); char Buchstabe; while(1) { fscanf(fsrc,"%c",&Buchstabe); if((--Buchstabe)<1) Buchstabe=255; if(feof(fsrc)) break; fprintf(ftar,"%c",Buchstabe); } fclose(fsrc);fclose(ftar); } else cout<<"Falsche Eingabe"; return system("PAUSE"); }
Hoffe es hilft jemanden
-
also so würds mir ganz gut gefallen, denk das braucht sich auch performance mäßig nicht verstecken, könnts ja mal eure meinung posten
#include <stdio.h> #include <stdlib.h> #include <string.h> #define ERR_FILE_OPEN -1 #define ERR_FILE_WRITE -2 #define ERR_FILE_SEEK -3 #define ERR_FILE_CLOSE -4 #define WORK_BLOCK_SIZE 8096 char encodeTable[256]; char decodeTable[256]; int processFile(char *fileName,void (*callback)(char*)){ char buffer[WORK_BLOCK_SIZE+1]; int bytesRead; FILE *fp = fopen(fileName, "r+"); if(fp==0) return ERR_FILE_OPEN; while(1){ bytesRead = fread(buffer,sizeof(char),WORK_BLOCK_SIZE,fp); if(bytesRead==0) break; buffer[bytesRead]='\0'; callback(buffer); if(fseek(fp, -bytesRead, SEEK_CUR)!=0) return ERR_FILE_SEEK; if(fwrite(buffer,sizeof(char),bytesRead,fp)!=bytesRead) return ERR_FILE_WRITE; if(fseek(fp, bytesRead, SEEK_CUR)!=0) return ERR_FILE_SEEK; } if(fclose(fp)!=0) return ERR_FILE_CLOSE; return 1; } void encodeCallback(char *str){ int l = strlen(str); while(l--){ str[l] = encodeTable[(unsigned char)str[l]]; } } void decodeCallback(char *str){ int l = strlen(str); while(l--){ str[l] = decodeTable[(unsigned char)str[l]]; } } void printCallback(char *str){ printf("%s",str); } void setTranslationTable(){ encodeTable[' '] = '_'; encodeTable['H'] = 'W'; encodeTable['e'] = 'o'; encodeTable['l'] = 'r'; encodeTable['o'] = 'd'; encodeTable['W'] = 'x'; encodeTable['r'] = 'l'; encodeTable['d'] = 'k'; decodeTable['_'] = ' '; decodeTable['W'] = 'H'; decodeTable['o'] = 'e'; decodeTable['r'] = 'l'; decodeTable['d'] = 'o'; decodeTable['x'] = 'W'; decodeTable['l'] = 'r'; decodeTable['k'] = 'd'; } int main(void) { char *fileName = "/home/matthias/Desktop/sammy.txt"; setTranslationTable(); printf("input :"); processFile(fileName,printCallback); processFile(fileName,encodeCallback); printf("\nencoded:"); processFile(fileName,printCallback); processFile(fileName,decodeCallback); printf("\ndecoded:"); processFile(fileName,printCallback); return 0; }
lg lolo
-
arr man sollte natürlich bevor man mit return aus processFile springt die datei schließen. @nwp2 ja es wird doch mal zeit für ne anmeldung...
-
naja und den callbacks könnte man ja die string länge auch gleich mit geben dann brauchen sie die nicht immer wieder auslesen, also eine never ending story
-
nwp2 schrieb:
... //get memory to contain the whole file char *buffer = (char*)malloc(filesize+1); ...
malloc bitte nicht casten, gilt als schlechter stil und so, das weisste ja sicher.
noobLolo schrieb:
also bei größeren dateien hauts dir doch den ram um die ohren?
...oder wenn 'ftell' fehlschlägt. was macht 'malloc' eigentlich, wenn man ihm eine -1 vorsetzt? *fg*
-
Ich habs noch nicht ausprobiert was bei großen Dateien passiert. Eigentlich sollte malloc fehlschlagen und alles ist schick. Und ich muss malloc casten weil C++ dumm ist und keinen impliziten cast von void * nach wasauchimmer * hat. Fürs Forum hätte ich es rausnehmen können, hab ich vergessen.
-
nwp2 schrieb:
Und ich muss malloc casten weil C++ dumm ist und keinen impliziten cast von void * nach wasauchimmer * hat. Fürs Forum hätte ich es rausnehmen können, hab ich vergessen.
benenn deine sources einfach mit .c als extension, bzw. stell deine IDE so ein, dass sie den C- statt cpp-compiler anwirft. casten des rückgabewertes von 'malloc' sollte man sich garnicht erst angewöhnen, finde ich.
--> http://c-faq.com/malloc/mallocnocast.html
-
machs doch einfach in c, dann hast den stress nicht
-
Ich weiß, dass malloc casten schlecht ist. C benutzen ist aber noch schlechter, weil dann der Schwachsinn mit "Variablen müssen am Anfang des Blocks definiert sein" und "//C++-Style Kommentare nicht erlaubt" und "class not defined" anfängt. Ich habe nichmal eine IDE, weil der Aufwand Eclipse, Netbeans und Co zum laufen zu kriegen so extrem hoch ist, dass es sich für mich nicht lohnt. Im Moment benutze ich Scite + Commandline, da weiß ich wenigstens was ich tue. Für meinen selbsgebastelten Editor habe ich ein makefile gebaut, aber der Aufwand war so extrem hoch, dass es sich nicht gelohnt hat. Obwohl es schon nett ist wenn man es erstmal hat und weiß wie man es zwingen kann etwas sinnvolles zu tun.
Edit: Das Argument von http://c-faq.com/malloc/mallocnocast.html zieht ja mal garnich, wenn malloc nicht definiert ist kriege ich das schon mit. Es ist einfach hässlich und unnötig, das ist alles.
-
Variablen nicht am Anfang und oneline-comments sind mit C99 kein Problem
-
nwp2 schrieb:
C benutzen ist aber noch schlechter, weil dann der Schwachsinn mit "Variablen müssen am Anfang des Blocks definiert sein" und "//C++-Style Kommentare nicht erlaubt" und "class not defined" anfängt.
du benutzt doch GCC, oder? der kann C99 und spätestens ab da kannste auch //-comments benutzen und variablen hinsetzen wo du willst. was bedeutet denn: 'class not defined'?
nwp2 schrieb:
Ich habe nichmal eine IDE, weil der Aufwand Eclipse, Netbeans und Co zum laufen zu kriegen so extrem hoch ist, dass es sich für mich nicht lohnt. Im Moment benutze ich Scite + Commandline, da weiß ich wenigstens was ich tue.
heilige steinzeit! *fg* es gibt etliche C-IDEs für linux und windoofs (code-blocks, anjuta, usw). auf der kommandozeile mit manuellem makefile-gefrickel muss doch heute kein mensch mehr programmieren. *lol* (Java-IDEs für die C-programmierung würde ich aber auch nicht unbedingt bevorzugen. kann sein, dass netbeans in verbindung mit C was taugt, aber eclipse/CDT ist definitiv mist).
-
;fricky schrieb:
was bedeutet denn: 'class not defined'?
class ist die C++-Erweiterung für struct wo man es sich sparen kann das aufrufende Objekt mitzugeben und Konstruktor/Destruktor hat, was sehr der Übersicht dient.
;fricky schrieb:
heilige steinzeit! *fg* es gibt etliche C-IDEs für linux und windoofs (code-blocks, anjuta, usw). auf der kommandozeile mit manuellem makefile-gefrickel muss doch heute kein mensch mehr programmieren. *lol*
Ich habe nichts besseres QQ.
Aber irgendwie habt ihr schon recht. Ich werde mir mal codeblocks oder so ankucken, vielleicht kriegt man es ja ohne extremen Aufwand zum laufen.
Edit: wenn "ich" es ohne extremen Aufwand zum Laufen kriege, nicht "man". Ich habe festgestellt, dass es unglaublich talentierte Menschen gibt, die sogar Linux benutzen können.
-
nwp2 schrieb:
;fricky schrieb:
was bedeutet denn: 'class not defined'?
class ist die C++-Erweiterung für struct wo man es sich sparen kann das aufrufende Objekt mitzugeben und Konstruktor/Destruktor hat, was sehr der Übersicht dient.
häh? du bist nicht zufälligerweise volkard, der sich mit einem zweit-account tarnt, um verwirrung unter uns C-usern zu stiften? *fg*
nwp2 schrieb:
Ich werde mir mal codeblocks oder so ankucken, vielleicht kriegt man es ja ohne extremen Aufwand zum laufen.
ja, mach das, du wirst begeistert sein. unter windows ist es echt easy, einfach installieren und gleich loslegen. wie's sich unter linux anfühlt, kann ich dir leider nicht sagen, aber funzt da vermutlich auch ganz gut.
-
nwp2 schrieb:
Ich habe nichmal eine IDE, weil der Aufwand Eclipse, Netbeans und Co zum laufen zu kriegen so extrem hoch ist, dass es sich für mich nicht lohnt.
also ich kann verstehen was du meinst aber ich verwende easy eclipse denke dass machts doch schon echt einfach, noch easyer gehts nicht.http://www.easyeclipse.org/site/home/ lg lolo
-
Ok, code::blocks ist schonmal nichts für mich. Der Aufwand sowas hier zum laufen zu kriegen ist mir zuviel.
#include <stdio.h> int main(){ printf("hallo\n"); }
Ich mache mir ein Projekt (wozu eigentlich, ich will garkeins!), füge eine C-Datei ein, sage Run, "Projekt wurde noch nicht gebaut, wollen Sie es jetzt bauen?"->Ja->"Projekt wurde noch nicht gebaut, wollen Sie es jetzt bauen?"->Ja->"Projekt wurde noch nicht gebaut, wollen Sie es jetzt bauen?"->Ja->"Projekt wurde noch nicht gebaut, wollen Sie es jetzt bauen?"->lösche codeblocks.
Auch ein manuelles "build" bringt nix, "nothing to build". Ich weiß, mit einem Haufen Hacks läuft es irgendwann, aber bis dahin bin ich schon fertig
Ach ja, Installation inklusive MinGW, ist ja nicht so als hätte er keinen Compiler.Eclipse ist genauso, ich versuche es mal mit anjuta.
Edit: Ok, gibs nur für Linux. Bevor ich Gnome oder KDE wieder laufen habe ist es Weihnachten :xmas1:
Also bleibe ich bei Scite bis mein selbst geschriebener Editor fähig wird.
-
Wieso machst du ein Projekt? Mach ne leere .c datei und klick auf Build, fertig?
Bei Projekten geht das eigentlich genauso, kA was bei dir da kaputt ist (war)... bei mir ging das alles auf Anhieb.
-
nwp2 schrieb:
Also bleibe ich bei Scite bis mein selbst geschriebener Editor fähig wird.
ok, dann versuchs mal mit 'notepad.exe', oder besser noch: 'cmd.exe' und gib 'edit' ein. meinste, das kriegste hin? *fg*
-
Zum Glück funktioniert ed ohne den xserver