Szyfrowanie dowolnego pliku

0

Posklejałem program ale coś nie chodzi czy ktoś może doradzić co jest nie tak. Program otwiera plik pobiera z niego dane ale jak przychodzi co do czego to pustą tablice szyfruje.

#include <iostream>
#include <fstream>
#include <conio.h>
using namespace std;
int main()
{
    
     int n;                    //szyfr
        cout << "Podaj klucz (wartosc szyfrowania): ";
        cin >> n;
    fstream plik;
    plik.open( "dane.txt", ios::in );//otwiera plik
    if( plik.good() )
    {
        string napis;
        cout << "Zawartosc pliku:" << endl;
        while( !plik.eof() )
        {
            getline( plik, napis );//no i wyswietla jego treść
            cout << napis << endl;
         
        }
        plik.close();
    } else cout << "Error! Nie udalo otworzyc sie pliku!" << endl;// jak nie ma pliku to błąd
   
   
   
   char napis[64];// to chyba tablica
        
        
        for(int i=0;i<64;i++)// szyfrowanie 
        {
                napis[i] = (char)((int)napis[i]+n);
                cout << napis[i];
                }  
   cout << endl<< endl<< endl<< endl<< endl<< endl;
   
   
        
        
        
       for(int k=0;k<64;k++)// deszyfrowanie
       {
               napis[k] = (char)((int)napis[k]-n);
                cout <<  napis[k];
              }
               
    getch();
    return( 0 );
}

0

eof() informuje o próbie czytania poza plikiem, a nie o osiągnięciu końca pliku (subtelna ale ważna różnica).
Powinno być:

        while(getline( plik, napis ))
        {
            cout << napis << endl;
        }

Poza tym wczytujesz wartości i od razu je zapominasz nadpisując je nowymi liniami.
Zauważ, że masz dwie RÓŻNE zmienne o nazwie napis! jedna typu string druga typu char [], dla której nigdy nie nadajesz sensownej wartości (szyfrujesz śmieci).

0
char napis[64];// definiujesz pustą tablicę
 
 
        for(int i=0;i<64;i++)// robisz pętelke, dla wszystkich rekordów tablicy
        {
                napis[i] = (char)((int)napis[i]+n); // i tutaj wtf? napis[i] jest null, dodajesz do nula n - a n jest wprowadzany przez użytkownika w postaci INT, czyli wartość dla każdego elementu danej tablicy będzie taka sama (nie wiem jak w C jest - można dodawać wartość niezdefiniowaną z int? - ale mniejsza o to, tutaj chyba jest błąd )
                cout << napis[i]; // wyświetlasz znal
                 }  
   cout << endl<< endl<< endl<< endl<< endl<< endl;
 
 
 
0

Może ktoś będzie na tyle uprzejmy że to poprawi bo ja za bardzo nie wiem o co chodzi.

0

Masz szczęście, że akurat mi się nudzi:

#include <iostream>
#include <fstream>

using namespace std;
int main()
{
    int n;                    //szyfr
    cout << "Podaj klucz (wartosc szyfrowania): ";
    cin >> n;
    fstream plik;
    plik.open("dane.txt", ios::in);//otwiera plik
    string napis;
    if (plik.good())
    {
        cout << "Zawartosc pliku:\n";
        while (!plik.eof())
        {
            getline(plik, napis); //no i wyswietla jego treść
            cout << napis << endl;

            for (int i=0;i<napis.size();i++)// szyfrowanie
                napis[i] += n;

            cout << napis << "\n";

            for (int i=0;i<napis.size();i++)// deszyfrowanie
                napis[i] -= n;

            cout << napis << "\n";
        }
        plik.close();
    }
    else
    {
        cout << "Error! Nie udalo otworzyc sie pliku!\n";// jak nie ma pliku to błąd
        return 1;
    }

    return 0;
}
0

a jak to zrobić żeby zapisywał tylko ten tekst zaszyfrowany do osobnego pliku może być wcześniej utworzony np zaszyfrowany.txt bo coś próbowałem zrobić to zostawia pusty plik

0

Pokaż kod.

0

<code=c++>
#include <iostream>
#include <fstream>
#include <conio.h>
using namespace std;
int main()
{
int n; //szyfr
cout << "Podaj klucz (wartosc szyfrowania): ";
cin >> n;
fstream plik;
plik.open("dane.txt", ios::in);//otwiera plik
string napis;
if (plik.good())
{
cout << "Zawartosc pliku:\n";
while (!plik.eof())
{
getline(plik, napis); //no i wyswietla jego treść
cout << napis << endl;

        for (int i=0;i<napis.size();i++)// szyfrowanie
            napis[i] += n;

        cout << napis << "\n";
        

        for (int i=0;i<napis.size();i++)// deszyfrowanie
            napis[i] -= n;

        cout << napis << "\n";
    }
    plik.close();
}
else
{
    cout << "Error! Nie udalo otworzyc sie pliku!\n";// jak nie ma pliku to błąd
    return 1;
}

system("PAUSE");
return 0;   

}

0
#include <iostream>
#include <fstream>
#include <conio.h>
using namespace std;
int main()
{
    int n;                    //szyfr
    cout << "Podaj klucz (wartosc szyfrowania): ";
    cin >> n;
    fstream plik;
    plik.open("dane.txt", ios::in);//otwiera plik
    string napis;
    if (plik.good())
    {
        cout << "Zawartosc pliku:\n";
        while (!plik.eof())
        {
            getline(plik, napis); //no i wyswietla jego treść
            cout << napis << endl;
 
            for (int i=0;i<napis.size();i++)// szyfrowanie
                napis[i] += n;
 
            cout << napis << "\n";
            

            for (int i=0;i<napis.size();i++)// deszyfrowanie
                napis[i] -= n;
 
            cout << napis << "\n";
        }
        plik.close();
    }
    else
    {
        cout << "Error! Nie udalo otworzyc sie pliku!\n";// jak nie ma pliku to błąd
        return 1;
    }

	system("PAUSE");
    return 0;   
    
}
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1