Hi,
nachdem das if-Problem erfolgreich erledigt wurde (ich schäme mich immer noch dafür
) gibt's nun ein zweites Problem mit meinem Programm. Und zwar funktioniert es noch relativ gut, solange ich nur einfache .txt-Dateien verschlüsseln will. Sobald ich mich allerdings an eine .mp3 oder sonstwas wage, bekomme ich als verschlüsselte Datei nur ein ca. 2,nochwas KB großes File. Woran kann das liegen, bzw. wie kann ich das verhindern?
Hier noch der Quellcode:
Edit: Ich hab' das ganze jetzt mal (hoffentlich) gescheit kommentiert.
nachdem das if-Problem erfolgreich erledigt wurde (ich schäme mich immer noch dafür

Hier noch der Quellcode:
Code:
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
char zeichen_verschluesseln(char klar, char schluessel)
{
char code; //Schonmal die Variable für den verschlüsselten Char bereitmachen
int schluessel_ascii = (int)schluessel; //ASCII-Wert des Schlüssels in schluessel_ascii speichern
int ascii = (int)klar; //ASCII-Wert des Klar-Zeichens in ascii speichern
ascii = ascii + schluessel_ascii; //ASCII-Wert des Schlüssels und des Klar-Zeichens addieren
//if(ascii>127)ascii=ascii-128; //Wenn ASCII-Wert out of range, dann von vorne anfangen
code = (char)ascii; //Fertigen ASCII-Wert wieder auf char casten
return code; //Und den ganzen Senf zurückgeben
}
char zeichen_entschluesseln(char code, char schluessel)
{
char klar;
int schluessel_ascii = (int)schluessel;
int ascii = (int)code;
ascii = ascii - schluessel_ascii; //Das gleiche wie bei zeichen_verschluesseln, nur halt andersrum
//if(ascii<0)ascii=ascii+128; //(ASCII-Wert des Schlüssels vom Code-Zeichen abziehen)
klar = (char)ascii;
return klar;
}
int main()
{
char datei_klar[99]; //Char-Array für den Dateinamen der zu verschlüsselnden Datei
char datei_code[99]; //Char-Array für den Dateinamen der zu entschlüsselnden Datei
char nachricht_klar; //char für den jeweils zu verschlüsselnden Buchstaben
char nachricht_code; //char für den jeweils zu entschlüsselnden Buchstaben
int auswahl; //int für die Anfangsauswahl
int schluessel_laenge; //Länge des Schlüssels, man muss ja auch wissen, wann man aufhören muss
int schluessel_stelle; //Wo bin ich gerade im Schlüssel?
string schluessel; //The key himself
schluessel_stelle = 0; //Fangen wir mal bei 0 an
cout<<"***********************************"<<endl;
cout<<"*****Vigenere-Verschluesselung*****"<<endl;
cout<<"***********************************"<<endl<<endl;
cout<<"Bitte waehlen Sie, ob Sie ver- oder entschluesseln wollen"<<endl;
cout<<"(1) Verschluesseln"<<endl;
cout<<"(2) Entschluesseln"<<endl; //Menü-bla
cin>>auswahl; //Auswahl eingeben
if(auswahl==1) //Verschlüsseln-zweig
{
cout<<"Bitte den Namen der zu verschluesselnden Datei eingeben (mit Dateiendung)"<<endl;
cin>>datei_klar;
cout<<"Bitte den Schluessel eingeben (beliebige Zeichenfolge)"<<endl;
cin>>schluessel;
cout<<"Bitte den Namen der verschluesselten Datei angeben"<<endl;
cin>>datei_code;
schluessel_laenge=schluessel.length(); //Länge des Schlüssels herausfinden
ifstream klar(datei_klar); //Zu verschlüsselnde Datei öffnen
ofstream code(datei_code); //Datei für den Code-Text öffnen
while(!klar.eof()) //bis zum bitteren Ende...
{
nachricht_klar=klar.get(); //Hol dir das nächste Zeichen aus der Datei
if(klar.eof())break;
nachricht_code=zeichen_verschluesseln(nachricht_klar,schluessel[schluessel_stelle]);
//Verschlüssele es mit dem jeweils aktuellen Schlüsselzeichen
code<<nachricht_code;
//und speichere es in der geöffneten Datei
schluessel_stelle++;
//Nimm dir die nächste Schlüssel-stelle
if(schluessel_stelle>(schluessel_laenge-1))schluessel_stelle=0;
//Und wenn du am Ende bist, fang' wieder von vorne an :)
}
}
if(auswahl==2) //Entschlüsseln-zweig
{
cout<<"Bitte den Namen der zu entschluesselnden Datei eingeben (mit Dateiendung)"<<endl;
cin>>datei_code;
cout<<"Bitte den Schluessel eingeben (beliebige Zeichenfolge)"<<endl;
cin>>schluessel;
cout<<"Bitte den Namen der entschluesselten Datei angeben"<<endl;
cin>>datei_klar;
schluessel_laenge=schluessel.length();
ifstream code(datei_code);
ofstream klar(datei_klar);
while(!code.eof())
{
nachricht_code=code.get();
if(code.eof())break;
nachricht_klar=zeichen_entschluesseln(nachricht_code,schluessel[schluessel_stelle]);
//dasselbe wie oben, nur dass hier ent- und nicht verschlüsselt wird
klar<<nachricht_klar;
schluessel_stelle++;
if(schluessel_stelle>(schluessel_laenge-1))schluessel_stelle=0;
}
}
}
Edit: Ich hab' das ganze jetzt mal (hoffentlich) gescheit kommentiert.