ERLEDIGT
JA
JA
ANTWORTEN
14
14
ZUGRIFFE
307
307
EMPFEHLEN
-
04.08.11 15:59 #1
Hallo ich wollte gerne ein Bild verschlüsseln also eig nicht richtig sonder einfach nur das bild in C++ öffnen und eine 1 ans ände anhängen damit es nicht mehr geöffnet werden kann!
Und das ganze soll natürlich auch anderrum gehen also cursor an letzte stelle und löscht die 1 wieder!
Wie mache ich das?
habe schion probiert mit io::binary erstmal einzulesen und wieder zu schreiben kam zwar ein Bild raus aber das hatte nur noch grün-gelbe linien
DankeFehlermeldung bitte!
Google - Dein Freund und Helfer
-
04.08.11 16:13 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
04.08.11 17:15 #3
Danke
Aber wie kann ich dann Bilder ver und entschlüsseln?Fehlermeldung bitte!
Google - Dein Freund und Helfer
-
Hi
Wie "sicher" solls denn werden?
Wenn nur ein Standardnutzer vom Öffnen abgehalten werden soll:
zB. jeden Bytewert um eins erhöhen.
Am anderen Ende der Skala stehen Verfahren wie AES etc.
-
04.08.11 19:14 #5
Sicher soll's überhaupt nicht sein nur das ein normaler Nutzer es nicht mehr öffnen kann
Fehlermeldung bitte!
Google - Dein Freund und Helfer
-
Um den Vorschlag von oben nocheinma herzunehmen:
Du holst ein Byte des Bildes in einen char, machst +=1 und schreibst das Byte in die neue Ausgabedatei.
Und das für jedes Byte im Bild.
Oder auch nur für die ersten 100 oder so.
Solange der Header betroffen ist wird nichts mehr geöffnet.
Gruß
-
Ich für meinen teil würde einfach openSSL verwenden. je nach verwendungszweck entweder direkt die OpenSSL binarys, oder ne applikation gegen libcrypto linken.
Vom cryptologischen standpunkt her braucht man sich über caesar verfahren ("alles um 1 erhöhen" = caesar verschlüsselung mit key "1") gar nicht unterhalten. Ich finde das vaellt eher unter "verschleierung" als unter "verschlüsselung"
-
Naja, es ist ja auch keine Verschlüsselung.
Aber ein 0815-Windowsnutzer kommt damit auch schon nicht mehr zurecht.
-
04.08.11 20:54 #9
Danke erstmal
Ich will auch nur ne 0815 Verschlüsselung
@Sheel könntest du mir vll sagen wie ich denn die Datei einlese( wenn möglich mit ifstream) und jedes einzelne Zeichen Abfrage?
DankeFehlermeldung bitte!
Google - Dein Freund und Helfer
-
Das findet man doch ganz leicht...
http://www.cplusplus.com/reference/iostream/ifstream/
read.
Zum Rausschreiben mit ofstream: write
Zum Dateigröße herausfinden tellg und seekg
Gruß
-
Nun... die "billig" version sieht so aus:
zum "entschlüsseln" -1 anstatt +1.
Achtung untested - hab grad keinen C Compiler zur hand, keine garantie, dass nicht irgendwo noch tippfehler drin sind.
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { FILE *fpin, *fpout; if (argc != 3) { printf("Usage: program <inputfile> <outputfile>"); exit(-1); } fpin = fopen(argv[1], "rb"); fpout = fopen(argv[2], "wb"); if(!fpin || !fpout) { printf("fopen failed"); exit(-2); } while(!feof(fpin)) { fputc((unsigned char)(fgetc(fpin) + 1), fpout); } fclose(fpin); fclose(fpout); return 0; }
edit: stdlib.h eingefügt um warnings bezüglich exit() zu unterdrücken.Geändert von chibisuke (04.08.11 um 22:24 Uhr)
-
Beim "fopen failed" sollte der eventuell geöffnete andere Stream auch wieder geschlossen werden.
Binärmodus beim fopen?
Und außerdem sollte das Ganze ja mit iostreams gemacht werden.
-
kann gerne nach belieben erweitert und verbessert werden.
Aktuelle OS schliessen dateihandle so und so sauber, wenn die applikation beendet wird, aber ja, ganz korrekterweise würde man den anderen handle noch schliessen.
binary mode wäre aus kompatiblitätsgründen sinnvoll, ist aber in der regel nicht notwendig. ... ich pass es trotzdem mal an.
iostrams... ich mag diese STL dinger nicht... und der OP schieb nur, dass er es damit versucht hat, nicht dass er es unbedingt damit machen will. Das da oben ist ANSI-C code.
-
05.08.11 09:18 #14
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
@chibisuke: Man sollte niemals feof auf diese Weise verwenden, das funktioniert nicht generell. Man sollte vielmehr prüfen, ob 1. etwas gelesen wurde und 2. auch etwas geschrieben wurde!
Weiterhin ist eine sehr einfache, effektive Verschlüsselung die XOR Verknüpfung mit einer beliebigen, von 0 verschiedenen Zahl.
Solche Transformationen kann man in C++ relativ elegant mit dem std::transform Algorithmus durchführen:
GrußCode cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
#include <fstream> #include <iterator> #include <algorithm> #include <functional> ... std::ifstream in("bla.jpg", std::ios::binary); std::ofstream out("bla.jpg.x", std::ios::binary); if (!in.is_open()) return 1; if (!out.is_open()) return 2; char key = 1; std::istreambuf_iterator<char> start(in), end; std::transform(start, end, std::ostreambuf_iterator<char>(out), std::bind1st(std::plus<char>(), key)); if (start != end) { // failed reading input file ... } if (!out) { // failed writing output file ... }
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
05.08.11 20:57 #15
Danke an alle habe es jetzt hinbekommen mit den Codeschnipseln
MFGFehlermeldung bitte!
Google - Dein Freund und Helfer
Ähnliche Themen
-
Bild verschlüsseln
Von sebastianb im Forum Algorithmen & Datenstrukturen mit JavaAntworten: 7Letzter Beitrag: 08.02.11, 13:17 -
URL mit PHP verschlüsseln
Von Dörti.Hermi im Forum PHPAntworten: 6Letzter Beitrag: 30.08.07, 11:21 -
Verschlüsseln
Von d_Artagne im Forum .NET DatenverwaltungAntworten: 20Letzter Beitrag: 16.10.05, 21:52 -
verschlüsseln
Von hhunderter im Forum Visual Basic 6.0Antworten: 3Letzter Beitrag: 30.06.05, 19:03 -
verschlüsseln
Von marcaurel1984 im Forum C/C++Antworten: 3Letzter Beitrag: 15.06.05, 12:14





Zitieren


Login






