milmega Temat założony przez niniejszego użytkownika |
Szyfrowanie XOR » 2017-05-12 22:44:56 Zadanie: Przez parametr char message[] przekazano do funkcji wiadomość tekstową do zaszyfrowania, zaś przez parametr char key[5] 5-elementowy klucz szyfrujący. Należy użyć go w taki sposób, aby wykonać operację XOR na każdym kolejnym znaku wiadomości z każdym kolejnym znakiem klucza. Po wykorzystaniu piątego znaku klucza, w następnej operacji należy skorzystać ponownie z pierwszego znaku, następnie drugiego itd., do momentu gdy wszystkie znaki wiadomości zostaną zaszyfrowane. Mam tu szkielet tej funkcji, ale są w niej błędy, braki itp. Co pozmieniać by wszystko poprawnie działało? void xorEncrypt( char message[], char key[ 5 ] ) { int licznik = 0; int y = 0; for( int i = 0; i <= licznik; i++ ) { if( message[ i ] > 0 ) { for( int x = 0;(( x < 5 ) &&( x == y ) ); x++ ) { message[ i ] = message[ i ] ^ key[ x ]; if( x == 5 ) { x = 0; y = 0; } } y++; } } }
|
|
jankowalski25 |
» 2017-05-12 22:49:44 for( int i = 0; i <= licznik; i++ ) |
Ile razy wykona się ta pętla? |
|
milmega Temat założony przez niniejszego użytkownika |
» 2017-05-12 23:02:45 No powinna tyle razy ile jest znaków w wiadomości ale nie dokonca wiem jak to zapisac |
|
jankowalski25 |
» 2017-05-12 23:06:52 1. Ile wynosi i (na początku pętli)? 2. Ile wynosi licznik (na początku pętli)? 3. Czy teraz rozumiesz, o co mi chodzi? |
|
milmega Temat założony przez niniejszego użytkownika |
» 2017-05-12 23:12:00 i wynosi zero tak samo jak licznik. Licznik miał na celu oznaczać null na koncu wiadomosci. |
|
jankowalski25 |
» 2017-05-12 23:19:26 Więc jaką wartość przyjmie warunek na początku pętli? Pomyśl, jak to wykonuje komputer, kawałek po kawałku: 1. Podstaw zamiast i wartość, którą przed chwilą podałeś. 2. To samo w przypadku zmiennej licznik . 3. Jaki wynik daje ta nierówność? 4. A teraz pomyśl, kiedy pętla zostanie przerwana. Już rozumiesz, dlaczego tak zwracam uwagę na ten kawałek? |
|
mateczek |
» 2017-05-13 09:45:42 no i po co tyle pętli zagnieżdżonych ?? #include <iostream> #include <math.h> using namespace std; void xorEncrypt( char message[], char key[ 5 ] ) { for( int i = 0; i < 20; i++ ) { message[ i ] ^= key[ i % 5 ]; } }
int main() { char napis[ 20 ] = "Alicja ma Tygrysa"; char key[ 6 ] = "qwert"; xorEncrypt( napis, key ); cout << napis << endl; xorEncrypt( napis, key ); cout << napis << endl; }
przy odszyfrowaniu nulla jako koniec c-stringa sprawdzać nie możesz bo 'a' xor 'a' będzie nulem !!! |
|
milmega Temat założony przez niniejszego użytkownika |
» 2017-05-13 12:05:02 @jankowalski25 miałem w planie zrobić, żeby pętla wykonywała dopóki i nie jest nullem. Tylko jest problem, ponieważ null to zero, wiec nie moge wstawić zera w miejsce licznika, bo pierwsze miejsce w tablicy tez ma wartosc zero. |
|
« 1 » 2 |