Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Verschlüsselungsmethoden

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] [ 2 ] > 3 < [ 4 ]
020
01.11.2005, 15:29 Uhr
~erpel
Gast


Was hat das in diesem thread zu tun?
Leute helft mir dochmal. Mein ganzen Programm spinnt, sobald es auf ein Enter im Text ist.
Ich habs schon mit

C++:
    if (asci != 13)
    {
        asci += 13; //bsp. rot 13 verschiebung
        bild = asci;
        datei_s << bild;
    }


Die Zahl 13 ist doch Enter oder?

Bitte helft mir! Andere Steuerzeichen wie Leerzeichen oder Tabulator sind kein Problem!
danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
021
01.11.2005, 16:32 Uhr
predator



Unter Windows ist ein Zeilenumbruch \r\n also 0Dh 0Ah also 13 10...

Vielleicht hängts ja damit zusammen...
--
Gruß
predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
022
01.11.2005, 17:29 Uhr
~erpel
Gast


ne also das funzt ja mal garnicht, wenn ich schreibe

C++:
if (asci != 13 && asci != 10)


Es bringt ja auch nichts, wenn ich die Enter weg lasse. Hat noch jemand ne Idee?
Auch wenn ich nur ein Enter im Text hab, steht danach in der 2.zeile ein zeichen.
??help
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
023
01.11.2005, 19:16 Uhr
predator



Also ehrlich gesagt versteh ich nicht ganz, was du noch willst

Sachen wie

Zitat von ~erpel:
Mein ganzen Programm spinnt, sobald es auf ein Enter im Text ist.


Zitat von ~erpel:
ne also das funzt ja mal garnicht


Zitat von ~erpel:
Auch wenn ich nur ein Enter im Text hab, steht danach in der 2.zeile ein zeichen.

helfen einem nicht wirklich...
Wie spinnt dein Programm?
Was "funzt ja mal gar nicht"?
Was für ein Zeichen?

Beschreib doch noch mal ganz genau, was eigentlich los ist
--
Gruß
predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
024
01.11.2005, 19:47 Uhr
~erpel
Gast


Also ok.
Ich möchte mit

C++:
    while ( datei_l.good())
    {        
    asci = original;
    if (asci > 128) asci = 256 + asci;
       asci += 13;
       bild = asci;
       datei_s << bild;
    datei_l.get(original); //Zeichen holen
    }


Alle Zeichen eines Textes verschlüsseln. Das Entschlüsseln macht keine Probleme, genau wie oben bloß mit

C++:
asci -= 13;


Sobald ein Zeilenumbruch im Text steht, taucht nach dem entschlüsseln aber ein Problem auf. Dann steht im Text plötzlich auch ein Zeilenumbruch, aber danach noch ein Zeichen.
aus

Code:

bla
bla


wird im Beispiel

Code:

bla
blaT


Wenn nur eine Zeile im Text steht, tritt so ein Phänomen nicht auf.
Das ist mein Problem. Danke für die Hilfe.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
025
01.11.2005, 21:11 Uhr
predator



Na also geht doch

mmmh... also ich hab das ganze grad mal in ein Programm gepackt, und bei mir geht es.

Zeig mal deinen vollständigen Code, vielleicht ist da ja ein Fehler drin...
--
Gruß
predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
026
01.11.2005, 23:00 Uhr
~erpel
Gast


Oha, das ist ja komisch.
Okay, hier.

C++:
#include <iostream.h>
#include <fstream.h>
#include <conio.h>

int verschluesselung() //Verschluesselung der Datei
{
    char original;
    char bild;
    char pfad[256];
    int asci;
    
    system("cls");
    
    cout << "Pfad der zu verschluesselnden Datei eingeben: ";
    cin.getline(pfad,256);
    
    ifstream datei_l (pfad); //zum Lesen öffnen  
    ofstream datei_s (pfad,ios::in); //zum Schreiben öffnen
    datei_l.seekg(0); //hier die Anfangsposition einsetzen
    datei_s.seekp(0); //hier Anfangs-Schreibposition einsetzen
    
    datei_l.get(original); //erstes Zeichen holen  
    
    while ( datei_l.good())
    {        
    asci = original;
    if (asci > 128) asci = 256 + asci;
       asci += 13;
       bild = asci;
       datei_s << bild;
    datei_l.get(original); //Zeichen holen
    }
    datei_l.close();
    datei_s.close();
    getch();
}

int entschluesselung() //Entschluesselung der Datei
{
    char original;
    char bild;
    char pfad[256];
    int asci;
    
    system("cls");
    
    cout << "Pfad der zu entschluesselnden Datei eingeben: ";
    cin.getline(pfad,256);
    
    ifstream datei_l (pfad); //zum Lesen öffnen  
    ofstream datei_s (pfad,ios::in); //zum Schreiben öffnen
    datei_l.seekg(0); //hier die Anfangsposition einsetzen
    datei_s.seekp(0); //hier Anfangs-Schreibposition einsetzen
    
    datei_l.get(bild); //erstes Zeichen holen  
    
    while ( datei_l.good())
    {        
    asci = bild;
    if (asci > 128) asci = 256 + asci;
       asci -= 13;
       original = asci;
       datei_s << original;        
       datei_l.get(bild); //Zeichen holen
    }
    datei_l.close();
    datei_s.close();
    getch();
}


int main() //Standart-Auswahl Menü
{
    char auswahl;

    while (true)
    {
    
        system("cls");
        cout << "                 -Verschluesselungsprogramm-" << "\n\n\n\n\n";
        cout << "  [V] - Datei verschluesseln" << "\n";
        cout << "  [E] - Datei entschluesseln" << "\n";
        cout << "  [B] - Beenden" << "\n";

        auswahl=getch();
        
        switch (auswahl)
        {
                case 'v' : verschluesselung();  break;
                case 'e' : entschluesselung();  break;
                case 'b' : return 0;  break;
        }
    }
    return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
027
01.11.2005, 23:30 Uhr
predator



öhm..., konntest du den Code so kompilieren?
Die Funktionen verschluesselung und entschluesselung geben doch keinen Wert zurück, das dürfen also keine int, sondern void Funktionen sein.
Außerdem sind bei deinen Dateioperationen einige Fehler:
Du öffnest die gleiche Datei einmal als ifstream und einmal als ofstream.
Und das ios::in(zum Lesen öffnen) hat bei ofstream ja wohl nichts zu suchen...

Ich poste jetzt einfach mal meinen Code, vielleicht hilft er dir ja.

C++:
#include <iostream>
#include <fstream>
using namespace std;

void encodeFile();
void decodeFile();

int main()
{
    int i=0;
    while(i!=3)
    {
        cout << "\t--------------------------" << endl;
        cout << "\tVerschluesselungs-Programm" << endl;
        cout << "\t--------------------------" << endl;
        cout << "[1] Datei verschluesseln" << endl;
        cout << "[2] Datei entschluesseln" << endl;
        cout << "[3] Beenden\n" << endl;
        cout << "Auswahl: ";
        cin >> i;
        
        switch(i)
        {
        case 1:
            encodeFile();
            cout << endl << "OK" << endl;
            break;
        case 2:
            decodeFile();
            cout << endl << "OK" << endl;
            break;
        case 3:
            break;
        default:
            cout << endl << "Gueltige Auswahlzahl eingeben!\n" << endl;
        }
    }

    return 0;
}


void encodeFile()
{
    char original, asci, bild;
    ifstream fin("text.txt");
    ofstream fout("encoded.txt");

    fin.get(original);
    
    while (fin.good())
    {        
        asci = original;
        asci += 13;
        bild = asci;
        fout << bild;
        fin.get(original); //Zeichen holen
    }

    fin.close();
    fout.close();
}

void decodeFile()
{
    char original, asci, bild;
    ifstream fin("encoded.txt");
    ofstream fout("decoded.txt");

    fin.get(original);
    
    while (fin.good())
    {        
        asci = original;
        asci -= 13;
        bild = asci;
        fout << bild;
        fin.get(original); //Zeichen holen
    }

    fin.close();
    fout.close();
}



Bei mir funktioniert so alles, auch das mit den Zeilenumbrüchen.
--
Gruß
predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
028
02.11.2005, 08:34 Uhr
~DoppleR
Gast


Ich habe mal dein Programm bei compiliert und getestet. Bei mir funktioniert es. Wenn die Eingabesdatei

Code:
bla
bla


ist, wird die Ausgabedatei

Code:
oyn^Woyn^W


Wobei '^W' als ein Zeichen zu sehen ist (mit less unter Linux '\n'+13, vermutlich unter Windows mit anderen Editoren etwas anderes).

Es ist klar, dass die newlines auch in der verschlüsselten Datei enthalten sein müssen, nur eben nicht mehr als newlines, sondern als etwas anderes (systemabhängiges). Binärzeichen werden von Editoren manchmal als Kombination mehrerer darstellbarer Zeichen angezeigt, vielleicht liegen die Probleme ja darin begründet.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
029
02.11.2005, 16:30 Uhr
~erpel
Gast


Also das mit den Funktionen ist mir ja peinlich...ok, habs verbessert.
Warum darf ich nicht die datei als ifstream und als ofstream öffnen?
Ich will doch keine 2.Datei benutzen, sondern alles in einer durchführen.
Achja, und in der MSDN gibts das ios::in bei ofstreamm das heisst, dass er mir die datei falls es sie gibt, nicht überschreibt, dass ist nämlich die standart option bei ofstream. Und dadurch komm ich mit seekp(); an die anfangsposition.
Das Phänomen tritt immernoch auf.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] > 3 < [ 4 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: