algorytm.org

Implementacja w C/C++

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Szyfr z dowolnym przesunięciem - Implementacja w C/C++
Ocena użytkownikóww: *****  / 2
SłabyŚwietny
Nadesłany przez Krzysztof Maćkowiak, 17 sierpnia 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

przesun_c/PRZESUNS.CPP:
//Program szyfrujacy tekst z pliku za pomoca algorytmu podstawieniowego monoalfabetycznego o wybranym przesunieciu
//Program pobrano ze strony www.algorytm.org
//Opracowal Krzysztof Mackowiak

#include<stdio.h>
#include<iostream.h>
#include <math.h>

void main()
{
FILE *we, *wy;
char znak;       //znak odczytany z pliku
//Przed uruchomieniem programu nalezy utworzyc 2 pliki - 1. z tekstem jawnym, 2. pusty na t.zaszyfrowany
char plik_jawny[20];  //nazwa pliku z tekstem jawnym
char plik_zaszyfrowany[20];  //nazwa pliku z tekstem zaszyfrownym
int przesuniecie;     //wartosc przesuniecia np. dla 3 bedzie to szyfr odpowiad. szyfrowi Cezara
cout<<"Podaj nazwe pliku, ktorego tresc ma zostac zaszyfrowana: " ;
cin>>plik_jawny;
cout<<"Podaj nazwe pliku wynikowego: ";
cin>>plik_zaszyfrowany;
cout<< "Podaj warosc przesuniecia (1-25): ";
cin>>przesuniecie;
if ((przesuniecie>=1)&&(przesuniecie<=25))
{
if((we=fopen(plik_jawny,"rb"))!=NULL)    //otwieranie pliku 1. do odczytu
{
if((wy=fopen(plik_zaszyfrowany,"wb"))!=NULL)  //otwieranie pliku 2. do zapisu
{
   while((znak=getc(we))!=EOF)   //pobieranie znaku z pliku 1. tak dlugo az nie nastapi znak konca pliku
   //Kazdy odczytywany znak wg kodow ASCII jest przydzielany do 3 grup duze litery, male litery, cyfry
           {
                if ((znak>=65)&&(znak<=90))
                     {
                        znak-=65;
                        znak+=przesuniecie;
			znak=fmod(znak,26);  //operacja ta potrzebna jest aby przykladowo litera z szyfrowana byla jako c a nie jako znaczek o nr o 3 wiekszym w tablicy ASCII
                        znak+=65;
			putc(znak,wy);
                     }
                 else if ((znak>=97)&&(znak<=122))
                     {
                        znak-=97;
                        znak+=przesuniecie;
                        znak=fmod(znak,26);   
                        znak+=97;
                        putc(znak,wy);
                     }
                 else if ((znak>=48)&&(znak<=57))
                     {
                        znak-=48;
                        znak+=przesuniecie;
                        znak=fmod(znak,10);
                        znak+=48;
                        putc(znak,wy);
		     }
//Wszystkie inne znaki sa pomijane. Jezeli zalezy Ci aby nie pomijac niektorych znakow powinienes
//dodac w tym miejscu nastepujace linijki kodu:
//else if(znak==nr)   gdzie przez nr rozumiemy nr kodu ASCII danego znaku
//{znak+=przesuniecie;
//putc(znak,wy);}
//W funkcji deszyfrujacej nalezy umiescic to samo zmieniajac + na -.
      }
fclose(wy);
 }
fclose(we);
 }
cout<< "Szyfrowanie zostalo zakonczone";
}
else cout<< "Podano bledna wartosc przesuniecia";
return;
}

przesun_c/PRZESUND.CPP:
//Program deszyfrujacy tekst z pliku za pomoca algorytmu podstawieniowego monoalfabetycznego o wybranym przesunieciu
//Program pobrano ze strony www.algorytm.org
//Opracowal Krzysztof Mackowiak

#include<stdio.h>
#include<iostream.h>
#include <math.h>

void main()
{
FILE *we, *wy;
char znak;       //znak odczytany z pliku
//Przed uruchomieniem programu nalezy utworzyc 2 pliki - 1. z tekstem zaszyfrowanym, 2. pusty na t.odszyfrowany
char plik_jawny[20];  //nazwa pliku z tekstem jawnym
char plik_zaszyfrowany[20];  //nazwa pliku z tekstem zaszyfrownym
int przesuniecie;   //wartosc przesuniecia
cout<<"Podaj nazwe pliku zawierajacego tekst zaszyfrowany: ";
cin>>plik_zaszyfrowany;
cout<<"Podaj nazwe pliku,w ktorym zapisany ma byc tekst odszyfrowany: " ;
cin>>plik_jawny;
cout<< "Podaj warosc przesuniecia (1-25): " ;
cin>>przesuniecie;

if ((przesuniecie>=1)&&(przesuniecie<=25))
{
if((we=fopen(plik_zaszyfrowany,"rb"))!=NULL)    //otwieranie pliku 1. do odczytu
{
if((wy=fopen(plik_jawny,"wb"))!=NULL)  //otwieranie pliku 2. do zapisu
{
   while((znak=getc(we))!=EOF)   //pobieranie znaku z pliku 1. tak dlugo az nie nastapi znak konca pliku
   //Kazdy odczytywany znak wg kodow ASCII jest przydzielany do 3 grup duze litery, male litery, cyfry
	    {
		if ((znak>=65)&&(znak<=90))
                     {
			znak-=65;
			znak-=przesuniecie;
			if (znak<0)
			     znak=26-fabs(znak);
			znak+=65;
			putc(znak,wy);
                     }
		 else if ((znak>=97)&&(znak<=122))
                     {
			znak-=97;
			znak-=przesuniecie;
			if (znak<0)
			     znak=26-fabs(znak);
			znak+=97;
			putc(znak,wy);
                     }
		 else if ((znak>=48)&&(znak<=57))
                     {
			znak-=48;
                        if (przesuniecie<=10)
				 znak-=przesuniecie;
			else if (przesuniecie<=20)
				{
				    przesuniecie-=10;
				    znak-=przesuniecie;
				}
			else   {
				    przesuniecie-=20;
				    znak-=przesuniecie;
				}
			if (znak<0)
			     znak=10-fabs(znak);
			znak+=48;
                        putc(znak,wy);
                     }
        
	}
fclose(wy);
 }
fclose(we);
 }
cout<<"Deszyfrowanie zostalo zakonczone";
}
else cout<< "Podano bledna wartosc przesuniecia";
return;
}
Dodaj komentarz