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

Szyfrowanie XOR

Ostatnio zmodyfikowano 2017-05-13 16:39
Autor Wiadomość
jankowalski25
» 2017-05-13 12:10:42
dopóki i nie jest nullem
Chyba raczej dopóki konkretny znak pod tym indeksem nie jest znakiem zerowym.

Zresztą, dlaczego tak bardzo upierasz się z tym
NULL
em? Sam znak zerowy lepiej wpisać jako
'\0'
 (żeby na pierwszy rzut oka było widać, że o to chodzi, a nie na przykład o jakiś wskaźnik), a zamiast indeksu weź konkretny znak, którego ten indeks ma dotyczyć. Przecież masz tablicę znaków, więc wystarczy po prostu odwołać się do jej elementu.
P-161043
milmega
Temat założony przez niniejszego użytkownika
» 2017-05-13 12:22:13
Trochę pozmieniałem. Lepiej?
C/C++
int x;
int y = 0;
for( int i = 0; message[ i ] != 0; i++ )
{
    for( x = 0;(( x < 5 ) &&( x == y ) ); x++ )
    {
        message[ i ] = message[ i ] ^ key[ x ];
       
    }
    if( x == 5 )
    {
        x = 0;
        y = 0;
    }
    else
    {
        y++;
    }
}
P-161044
jankowalski25
» 2017-05-13 13:59:38

Analiza kodu

C/C++
for( x = 0;(( x < 5 ) &&( x == y ) ); x++ )
{
    message[ i ] = message[ i ] ^ key[ x ];
}
Przeanalizuj tą pętlę linijka po linijce, kawałek po kawałku; dokładnie tak, jak robiłby to komputer. Wyobraź sobie, że nie masz zielonego pojęcia o tym, co ten kod ma robić. Dostajesz od programisty taki kawałek i zaczynasz go przetwarzać. Pomyśl, co się stanie po kolei, linia po linii, instrukcja po instrukcji. Czyli:
1. Sprawdzasz, czy możesz wejść do pętli.
2. Wstawiasz wnętrze pętli.
3. Dokładasz instrukcje kończące pętlę.
4. Powtarzasz to tak długo, aż rozwiniesz pętlę na tyle, aby zrozumieć, co tam się tak naprawdę dzieje (jeśli nie ma tego zbyt wiele, to najlepiej do końca).
W pewnym momencie powinieneś stwierdzić: aha! przecież to i tamto nie działa z takiego i takiego powodu. Podpowiedź: znowu wracamy do tego samego pytania, tylko dla innej pętli: "Ile razy wykona się ta pętla?".

Synteza kodu

Powyższe podejście powinno dawać odpowiedź na pytanie: "dlaczego to mi nie działa?". Innym sposobem jest dążenie do odpowiedzi na pytanie: "jak to zapisać?". Można na przykład napisać kilka pierwszych kroków pętli i złożyć to w odpowiedni sposób. Czyli coś w tym stylu:
C/C++
message[ 0 ] = //...
message[ 1 ] = //...
message[ 2 ] = //...
//...
Po napisaniu czegoś takiego powinna zapalić się w głowie lampka i nagle powiesz: "Hej! zamiast 0,1,2,... trzeba wstawić to, a zamiast powtarzania tego i tamtego należy wstawić takie i takie wyrażenie". A z tego już prosta droga do napisania odpowiedniej pętli, która robi to, co trzeba.

Dobra, masz dwa proste podejścia, użyj jednego z nich i pokaż, co wyszło z tej syntezy albo analizy.
P-161046
milmega
Temat założony przez niniejszego użytkownika
» 2017-05-13 16:39:05
Dzięki już mi się udało.
P-161058
1 « 2 »
Poprzednia strona Strona 2 z 2