Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Szyfrowanie danych

Ostatnio zmodyfikowano 2009-12-06 23:04
Autor Wiadomość
Saiph
Temat założony przez niniejszego użytkownika
Szyfrowanie danych
» 2009-12-06 18:40:06
Witam wszystkich.
Pisze własnie program szyfrujący dane, opieram się na bibliotece fstream.
I tu mam pewien kłopot...
Szyfr polega na przesunięciu znaków ASCII o liczbę podana przez użytkownika.
Stworzyłem plik a.txt o treści:

abc
def
ghi
Plik wazy 13 bajtow. Wczytuje plik, następnie zaszyfrowuje treść(przesuniecie wynosi 1) i zapisuje do pliku b.txt:

bcd efg hij[spacja][spacja]
No to dalej... Teraz rozszyfrowuje plik i wynik zapisuje do pliku c.txt:

abc
def
ghj[spacja][spacja]
I kłopot mam z tymi spacjami, dlaczego one się pojawiają? Czasami przy innych plikach tych spacji może być więcej albo może pojawić się jakiś inny znak :( Bardzo to utrudnia sprawę przy szyfrowaniu większych plików, a tym bardziej szyfrując jakieś zdiecia, czy pliki otwierane przez inny program...

Oto 2 części programu które odpowiadają za szyfrowanie i deszyfrowanie:
-szyfrowanie:
C/C++
clrscr();
int move5, lol;
string b5, NazwaPliku5, NazwaPliku5a;
cout << "Podaj nazwe pliku wejsciowego: ";
getline( cin, NazwaPliku5 );
cout << "Podaj nazwe pliku wyjsciowego: ";
getline( cin, NazwaPliku5a );
cout << "Podaj przesuniecie znakow: ";
cin >> move5;
cout << endl;


fstream plik5;
plik5.open( NazwaPliku5.c_str(), std::ios::in );
plik5.seekg( 0, ios::end );
lol = plik5.tellg();
plik5.seekg( 0, ios::beg );

fstream plik5a( NazwaPliku5a.c_str(), ios::out | ios::trunc );
if( plik5.good() == true )
{
    textcolor( 10 ); cout << "Plik wejsciowy otwarto!" << endl; textcolor( 7 );
   
    char a5[ lol ];
    plik5.read( a5, lol );
   
    for( int i = 0; i < lol; i++ )
         b5 += textToCode( a5[ i ], move5 );
   
    textcolor( 10 ); cout << "Tresc pliku wejsciowego zaszyfrowano!" << endl; textcolor( 7 );
    plik5a.write( & b5[ 0 ], b5.length() );
    if( !plik5a ) { textcolor( 12 ); cout << "ERROR! Pliku nie udalo sie zapisac!" << endl; getch(); clrscr(); goto main; } else { textcolor( 10 ); cout << "Zapisano zaszyfrowana tresc do pliku wyjsciowego!" << endl; getch(); clrscr(); goto main; }
    getch();
    clrscr();
    goto main;
   
   
} else { textcolor( 12 ); cout << "ERROR! Pliku nie udalo sie otworzyc!" << endl; getch(); clrscr(); goto main; }
-deszyfrowanie:
C/C++
clrscr();
int move6, lol2;
string a6, b6, NazwaPliku6, NazwaPliku6a;
cout << "Podaj nazwe pliku wejsciowego: ";
getline( cin, NazwaPliku6 );
cout << "Podaj nazwe pliku wyjsciowego: ";
getline( cin, NazwaPliku6a );
cout << "Podaj przesuniecie znakow: ";
cin >> move6;

cout << endl;

fstream plik6;
plik6.open( NazwaPliku6.c_str(), std::ios::in );

plik6.seekg( 0, ios::end );
lol2 = plik6.tellg();
plik6.seekg( 0, ios::beg );

fstream plik6a( NazwaPliku6a.c_str(), ios::out | ios::trunc );
if( plik6.good() == true )
{
    textcolor( 10 ); cout << "Plik wejsciowy otwarto!" << endl; textcolor( 7 );
    char a6[ lol2 ];
    plik6.read( a6, lol2 );
   
    for( int i = 0; i < lol2; i++ )
         b6 += codeToText( a6[ i ], move6 );
   
    textcolor( 10 ); cout << "Tresc pliku wejsciowego zdeszyfrowano!" << endl; textcolor( 7 );
    plik6a.write( & b6[ 0 ], b6.length() );
    if( !plik6a ) { textcolor( 12 ); cout << "ERROR! Pliku nie udalo sie zapisac!" << endl; getch(); clrscr(); goto main; } else { textcolor( 10 ); cout << "Zapisano zdeszyfrowana tresc do pliku wyjsciowego!" << endl; getch(); clrscr(); goto main; }
    getch();
    clrscr();
    goto main;
   
   
} else { textcolor( 12 ); cout << "ERROR! Pliku nie udalo sie otworzyc!" << endl; getch(); clrscr(); goto main; }
}

Proszę o pomoc w rozwiązaniu sprawy.
P-11966
Elaine
» 2009-12-06 18:56:07
Kiedy wy się wreszcie nauczycie, że wymyślanie przykładów niedziałania kodu, który się nie kompiluje nie ma sensu, bo niektórzy na tym forum (jeszcze) myślą?

Sformatuj ten kod sensownie i przepisz bez goto, wtedy pogadamy. I oczywiście pokaż textToCode i codeToText.
P-11967
Saiph
Temat założony przez niniejszego użytkownika
» 2009-12-06 19:32:33
o nie cały  post mi znikł ;(
C/C++
#include <iostream>
#include <conio.h>
#include <fstream>
#include "console.ddt"

using namespace std;
using namespace ddt::console;

int textToCode( int menu, int move );
int codeToText( int menu, int move );
void info( void );

int main()
{
    main:
    bool koniec = false;
    while( koniec != true )
    {
       
       
        info();
        unsigned char znak = getch();
        if( znak == 49 )
        {
            ddt::console::title( "Szyfrownik 1.0 (c)2009 by Saiph - Szyfrowanie" );
            clrscr();
            int move1;
            string a1, b1;
            cout << "Podaj text ktory chcesz zaszyfrowac: " << endl;
            getline( cin, a1 );
            cout << "Podaj przesuniecie znakow: ";
            cin >> move1;
            for( int i = 0; i < a1.length(); i++ )
                 b1 += textToCode( a1[ i ], move1 );
           
            cout << endl;
            cout << "Zaszyfrowany tekst to:" << endl << b1 << endl;
            getch();
            clrscr();
            goto main;
        }
        if( znak == 50 )
        {
            ddt::console::title( "Szyfrownik 1.0 (c)2009 by Saiph - Deszyfrowanie" );
            clrscr();
            int move2;
            string a2, b2;
            cout << "Podaj text ktory chcesz zdeszyfrowac: " << endl;
            getline( cin, a2 );
            cout << "Podaj przesuniecie znakow: ";
            cin >> move2;
            for( int i = 0; i < a2.length(); i++ )
                 b2 += codeToText( a2[ i ], move2 );
           
            cout << endl;
            cout << "Zdeszyfrowany tekst to:" << endl << b2 << endl;
            getch();
            clrscr();
            goto main;
        }
        if( znak == 51 )
        {
            ddt::console::title( "Szyfrownik 1.0 (c)2009 by Saiph - Szyfrowanie do pliku" );
            clrscr();
            int move3;
            string a3, b3, NazwaPliku3;
            cout << "Podaj nazwe pliku: ";
            getline( cin, NazwaPliku3 );
            cout << "Podaj text ktory chcesz zaszyfrowac: " << endl;
            getline( cin, a3 );
            cout << "Podaj przesuniecie znakow: ";
            cin >> move3;
            cout << endl;
            fstream plik3( NazwaPliku3.c_str(), ios::out | ios::trunc );
           
           
            for( int i = 0; i < a3.length(); i++ )
                 b3 += textToCode( a3[ i ], move3 );
           
            cout << "Zaszyfrowany tekst to:" << endl << b3 << endl << endl;;
            plik3.write( & b3[ 0 ], b3.length() );
            if( !plik3 ) { textcolor( 12 ); cout << "ERROR!" << endl; } else { textcolor( 10 ); cout << "Zapisano" << endl; }
            getch();
            clrscr();
            goto main;
        }
        if( znak == 52 )
        {
           
            ddt::console::title( "Szyfrownik 1.0 (c)2009 by Saiph - Deszyfrowanie z pliku" );
            clrscr();
            int move4, lol3;
            string a4, b4, NazwaPliku4;
            cout << "Podaj nazwe pliku: ";
            getline( cin, NazwaPliku4 );
            cout << "Podaj przesuniecie znakow: ";
            cin >> move4;
           
            fstream plik4;
            plik4.open( NazwaPliku4.c_str(), std::ios::in );
           
            plik4.seekg( 0, ios::end );
            lol3 = plik4.tellg();
            plik4.seekg( 0, ios::beg );
           
            if( plik4.good() == true )
            {
                textcolor( 10 ); cout << "Plik otwarto!" << endl; textcolor( 7 );
                char a4[ lol3 ];
                plik4.read( a4, lol3 );
                cout << "Zawartosc pliku: \n" << a4 << "\n\n Zdeszyfrowana zawartosc pliku: \n";
                for( int i = 0; i < lol3; i++ )
                     b4 += codeToText( a4[ i ], move4 );
               
                cout << b4;
            } else { textcolor( 12 ); cout << "ERROR! Pliku nie udalo sie otworzyc!" << endl; }
           
            getch();
            clrscr();
            goto main;
           
        }
        if( znak == 53 )
        {
            ddt::console::title( "Szyfrownik 1.0 (c)2009 by Saiph - Szyfrowanie pliku" );
            clrscr();
            int move5, lol;
            string b5, NazwaPliku5, NazwaPliku5a;
            cout << "Podaj nazwe pliku wejsciowego: ";
            getline( cin, NazwaPliku5 );
            cout << "Podaj nazwe pliku wyjsciowego: ";
            getline( cin, NazwaPliku5a );
            cout << "Podaj przesuniecie znakow: ";
            cin >> move5;
            cout << endl;
           
           
            fstream plik5;
            plik5.open( NazwaPliku5.c_str(), std::ios::in );
            plik5.seekg( 0, ios::end );
            lol = plik5.tellg();
            plik5.seekg( 0, ios::beg );
           
            fstream plik5a( NazwaPliku5a.c_str(), ios::out | ios::trunc );
            if( plik5.good() == true )
            {
                textcolor( 10 ); cout << "Plik wejsciowy otwarto!" << endl; textcolor( 7 );
               
                char a5[ lol ];
                plik5.read( a5, lol );
               
                for( int i = 0; i < lol; i++ )
                     b5 += textToCode( a5[ i ], move5 );
               
                textcolor( 10 ); cout << "Tresc pliku wejsciowego zaszyfrowano!" << endl; textcolor( 7 );
                plik5a.write( & b5[ 0 ], b5.length() );
                if( !plik5a ) { textcolor( 12 ); cout << "ERROR! Pliku nie udalo sie zapisac!" << endl; getch(); clrscr(); goto main; } else { textcolor( 10 ); cout << "Zapisano zaszyfrowana tresc do pliku wyjsciowego!" << endl; getch(); clrscr(); goto main; }
                getch();
                clrscr();
                goto main;
               
               
            } else { textcolor( 12 ); cout << "ERROR! Pliku nie udalo sie otworzyc!" << endl; getch(); clrscr(); goto main; }
        }
        if( znak == 54 )
        {
            ddt::console::title( "Szyfrownik 1.0 (c)2009 by Saiph - Deszyfrowanie pliku" );
            clrscr();
            int move6, lol2;
            string a6, b6, NazwaPliku6, NazwaPliku6a;
            cout << "Podaj nazwe pliku wejsciowego: ";
            getline( cin, NazwaPliku6 );
            cout << "Podaj nazwe pliku wyjsciowego: ";
            getline( cin, NazwaPliku6a );
            cout << "Podaj przesuniecie znakow: ";
            cin >> move6;
           
            cout << endl;
           
            fstream plik6;
            plik6.open( NazwaPliku6.c_str(), std::ios::in );
           
            plik6.seekg( 0, ios::end );
            lol2 = plik6.tellg();
            plik6.seekg( 0, ios::beg );
           
            fstream plik6a( NazwaPliku6a.c_str(), ios::out | ios::trunc );
            if( plik6.good() == true )
            {
                textcolor( 10 ); cout << "Plik wejsciowy otwarto!" << endl; textcolor( 7 );
                char a6[ lol2 ];
                plik6.read( a6, lol2 );
               
                for( int i = 0; i < lol2; i++ )
                     b6 += codeToText( a6[ i ], move6 );
               
                textcolor( 10 ); cout << "Tresc pliku wejsciowego zdeszyfrowano!" << endl; textcolor( 7 );
                plik6a.write( & b6[ 0 ], b6.length() );
                if( !plik6a ) { textcolor( 12 ); cout << "ERROR! Pliku nie udalo sie zapisac!" << endl; getch(); clrscr(); goto main; } else { textcolor( 10 ); cout << "Zapisano zdeszyfrowana tresc do pliku wyjsciowego!" << endl; getch(); clrscr(); goto main; }
                getch();
                clrscr();
                goto main;
               
               
            } else { textcolor( 12 ); cout << "ERROR! Pliku nie udalo sie otworzyc!" << endl; getch(); clrscr(); goto main; }
        }
        if( znak == 27 ) koniec = true;
       
    }
    return 0;
}


int textToCode( int menu, int move )
{
    for( int i = 0; i <= 255; i++ )
    {
        int j = i + move;
        if( menu == i ) return j;
       
    }
}

int codeToText( int menu, int move )
{
    for( int i = 0; i <= 255; i++ )
    {
        int j = i + move;
        if( menu == j ) return i;
       
    }
}
void info( void )
{
    ddt::console::title( "Szyfrownik 1.0 (c)2009 by Saiph" );
    clrscr();
    textcolor( 11 ); cout << "Szyfownik 1.0 "; textcolor( 14 ); cout << "(c)2009 by Saiph" << endl; textcolor( 7 );
    textcolor( 15 ); cout << "[1]"; textcolor( 7 ); cout << " - Szyfrowanie" << endl;
    textcolor( 15 ); cout << "[2]"; textcolor( 7 ); cout << " - Deszyfrowanie" << endl;
    textcolor( 15 ); cout << "[3]"; textcolor( 7 ); cout << " - Szyfrowanie do pliku" << endl;
    textcolor( 15 ); cout << "[4]"; textcolor( 7 ); cout << " - Deszyfrowanie z pliku" << endl;
    textcolor( 15 ); cout << "[5]"; textcolor( 7 ); cout << " - Szyfrowanie pliku" << endl;
    textcolor( 15 ); cout << "[6]"; textcolor( 7 ); cout << " - Deszyfrowanie pliku" << endl;
    textcolor( 8 ); cout << "[ESC]"; textcolor( 8 ); cout << " - Wyjscie" << endl; textcolor( 7 );
}

P-11968
malan
» 2009-12-06 21:34:47
Pierwszą rzeczą, za którą powinieneś się zabrać to poprawić "algorytm (de)szyfrujący", bo ten tak trochę nie za bardzo działa :). Weź sobie kartkę i długopis, napisz: "programowanie" i zaszyfruj go (tzn. przesuń o np. +5 znaków), a potem przelej to na c++. Powinno Ci wyjść: "uwtlwfrt|fsnj".
P-11971
Saiph
Temat założony przez niniejszego użytkownika
» 2009-12-06 21:48:35
algorytm działa(chyba), wpisałem żeby zaszyfrował programowanie z przesunięciem o 5 i wyszło tak jak napisałeś... ale nie w tym rzecz...chodzi mi o to jak zrobić żeby nie było tych dodatkowych znaków
P-11972
malan
» 2009-12-06 23:04:23
Skompilowałem kod u siebie i nadal pozostaje przy stwierdzeniu, że algorytm jest zły ;p.
Zamiast plik4.read (a4,lol3); użyłem plik4.getline(a4,lol3); i dane z pliku zostały pobrane poprawnie, ale po odkodowaniu do słowa dodały się 2 znaki.

Żeby nie było, że kłamie ;p:
Twój kod:
Podaj nazwe pliku: a.txt
Podaj przesuniecie znakow: 5
Plik otwarto!
Zawartosc pliku:
"uwtlwfrt|fsnj!@" // !@ ?

 Zdeszyfrowana zawartosc pliku:
programowanie&ang90;
Po moim tuningu:
Podaj nazwe pliku: a.txt
Podaj przesuniecie znakow: 5
Plik otwarto!
Zawartosc pliku:
"uwtlwfrt|fsn"

 Zdeszyfrowana zawartosc pliku:
programowani &ang90;
Mam nadzieję, że czegoś nie pomieszałem :).

// EDIT: dopiero teraz zauważyłem: do zmiennej lol3 trzeba dodać jeszcze 1, ponieważ ostatniej literki nie pobiera.
P-11974
« 1 »
  Strona 1 z 1