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

Szyfrowanie symetryczne - przestawienie kolumn C++

Object Storage Arubacloud
0 głosów
1,659 wizyt
pytanie zadane 17 lutego 2017 w C i C++ przez RedMartin Użytkownik (640 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ź 277 wizyt
pytanie zadane 22 kwietnia 2021 w C i C++ przez Doge Gaduła (3,370 p.)
0 głosów
1 odpowiedź 535 wizyt
pytanie zadane 10 marca 2016 w C i C++ przez Jędrzej Dembowski Użytkownik (740 p.)
0 głosów
0 odpowiedzi 925 wizyt
pytanie zadane 14 grudnia 2020 w C i C++ przez ResCrove Obywatel (1,700 p.)

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...