Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania bez odpowiedzi
Viewing all articles
Browse latest Browse all 21942

Szyfrowanie symetryczne - przestawienie kolumn C++

$
0
0

Witam!
Stworzyłem program szyfrujący metodą kolumnową. Nie jest ważne o co w nim chodzi bo wszystko działa do puki do zaszyfrowania mam tekst bez spacji. Po kilku próbach odkryłem, że błąd jest w złym wyliczaniu ilości znaków tekstu. Mam funkcję, która przesuwa znaki tak, by zniknęły spacje. Moje pytanie: Czemu tekst w tej funkcji po usunięci 2 spacji ma np. 9 znaków, a po przekazaniu do funkcji main() liczba tych znaków rośnie z powrotem do 11 (+2 spacje) skoro zostały one usunięte, a po wyświetleniu cout<<haslo; tekst jest scalony tzn. bez spacji?

 

//szyfrowanie metoda kolumnowa
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;

string cut_string(string tekst){
	int dlugosc = tekst.size();
	for(int i=0; i<dlugosc; i++){
		if(tekst[i] == ' '){
			dlugosc--;
			for(int j=i; j<dlugosc; j++){
				tekst[j] = tekst[j+1];
			}
			tekst[dlugosc] = '\0';
		}
	}
	cout << "tekst: "<< tekst << endl;
	cout << "dlugosc: "<< dlugosc << endl;
	return tekst;
}

string szyfruj(string txt, int ilosc_kolumn){
	//nie wiem czmu dlugosc tekstu jest nieadekwatna do prawdziwej
	string tekst = cut_string(txt);
	string zakodowany_tekst;
	int key;
	cout << "Podaj klucz skladajacy sie z "<< ilosc_kolumn << " znakow (0-"<< ilosc_kolumn-1 << ")"; cin >> key;
	int dlugosc = tekst.size();
	cout << "dlugosc: "<< dlugosc << endl;
	int T[ilosc_kolumn];

	for(int i=0; i<ilosc_kolumn; i++){
		T[i] = (int) key/pow(10,ilosc_kolumn-1-i);
		key = key - (T[i])*pow(10,ilosc_kolumn-1-i);
		cout << T[i] << "\t";
	}

	int k=0, j=T[k];
	for(int i=0; i<dlugosc; i++){
		zakodowany_tekst = zakodowany_tekst + tekst[j];
//		cout << "Za: "<< zakodowany_tekst << endl;
		j = j + ilosc_kolumn;
		if(isalnum(tekst[j]) == false) {
			j = T[++k];
//			cout << "WESZLO!!"<< endl;
		}
	}

	return zakodowany_tekst;
}

int main(){
	string tekst;
	int ilosc_kolumn;

	cout << "Podaj tekst jawny: "; getline(cin, tekst);
	cout << "Podaj ilosc kolumn: "; cin >> ilosc_kolumn;
	cout << "Tekst zaszyfrowany: "<< szyfruj(tekst, ilosc_kolumn);

	return 0;
}

Viewing all articles
Browse latest Browse all 21942