Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Szyfrowanie XOR

Ostatnio zmodyfikowano 2017-05-13 16:39
Autor Wiadomość
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?
C/C++
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++;
           
        }
    }
   
}
P-161026
jankowalski25
» 2017-05-12 22:49:44
for( int i = 0; i <= licznik; i++ )
Ile razy wykona się ta pętla?
P-161027
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
P-161028
jankowalski25
» 2017-05-12 23:06:52
i <= licznik
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?
P-161030
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.
P-161031
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:
i <= licznik
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?
P-161032
mateczek
» 2017-05-13 09:45:42
no i po co tyle pętli zagnieżdżonych ??
C/C++
#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";
    // szyfrowanie
    xorEncrypt( napis, key );
    cout << napis << endl;
    //odszyfrowywanie  
    xorEncrypt( napis, key );
    cout << napis << endl;
}

przy odszyfrowaniu nulla jako koniec c-stringa sprawdzać nie możesz bo

'a' xor 'a'
 będzie nulem !!!
P-161035
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.
P-161042
« 1 » 2
  Strona 1 z 2 Następna strona