• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Szyfrowanie symetryczne - przestawienie kolumn C++

Ultraszybki serwer VPS NVMe BIZNES
0 głosów
187 wizyt
pytanie zadane 17 lutego 2017 w C i C++ przez RedMartin Użytkownik (620 p.)

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;
}

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 79 wizyt
pytanie zadane 10 marca 2016 w C i C++ przez Jędrzej Dembowski Użytkownik (780 p.)
0 głosów
1 odpowiedź 124 wizyt
pytanie zadane 21 października 2017 w Python, Django przez Deloryn Obywatel (1,430 p.)
0 głosów
0 odpowiedzi 199 wizyt
Porady nie od parady
Forum posiada swój własny chat IRC, dzięki któremu będziesz mógł po prostu pogadać z innymi Pasjonatami lub zapytać o jakiś problem. Podstrona z chatem znajduje się w menu pod ikoną człowieka w dymku.
Ciekawy innych porad? Odwiedź tę stronę!

44,296 zapytań

84,112 odpowiedzi

167,460 komentarzy

21,201 pasjonatów

Przeglądających: 164
Pasjonatów: 8 Gości: 156

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...