<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Forum Pasja Informatyki - Najnowsze z tagiem xor</title>
<link>https://forum.pasja-informatyki.pl/tag/xor</link>
<description>Powered by Question2Answer</description>
<item>
<title>Szyfr XOR na pliku</title>
<link>https://forum.pasja-informatyki.pl/577309/szyfr-xor-na-pliku</link>
<description>

&lt;p&gt;Witam, mam za zadanie napisać program szyfrujący plik otworzony w trybie binarnym za pomocą szyfru XOR (Np. ifstream plik(&quot;xor.txt&quot;, ios::binary)). Dowiedziałem się że najlepszą opcją byłoby szyfrowanie znaków w postaci unsigned char, jednak rodzą się z tego moje wątpliwości. Myślę, że jedyną opcją byłoby odczytanie zawartości pliku do tablicy znaków, jednak nie będę wiedział, jak długie będą napisy w pliku. Dodatkowo próbowałem jako test zaszyfrować napis (który zawierał spacje) kluczem, najpierw szyfrując bezpośrednio na znakach (znak1 ^ znak2) później na kodach ASCII (liczba1 - 'A' ^ liczba2 - 'A') &amp;nbsp;+ 'A' oraz (liczba1 - ' ') ^ (liczba2 - ' ') + ' ' i w wyniku szyfrowania powstawały dziwne znaki. Najwyraźniej nie do końca rozumiem idei tego szyfrowania i dlatego piszę tutaj z pomocą. Jeżeli ktoś mógłby mi wyjaśnić jak będzie można to mniej więcej zaimplementować w C++ będę bardzo wdzięczny. Najlepiej bez użycia skomplikowanych komend.&lt;/p&gt;



&lt;p&gt;Nie wiem czy to pomoże, ale zamieszczam na razie kod wspominanego programu testowego.&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;

using namespace std;

int main()
{
    unsigned char A[13] = &quot;Ala ma kota.&quot;;
    unsigned char B[5] = &quot;abcd&quot;;
    int a, b;
    for(int i = 0; i &amp;lt; 12; i++)
    {
        a = A[i] - 'A';
        b = B[i] - 'A';
        a ^= b;
        a += 'A';
        cout &amp;lt;&amp;lt; (unsigned char)(a);
    }
    return 0;
}
&lt;/pre&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/577309/szyfr-xor-na-pliku</guid>
<pubDate>Sat, 31 Dec 2022 14:04:52 +0000</pubDate>
</item>
<item>
<title>Kryptografia c++</title>
<link>https://forum.pasja-informatyki.pl/552197/kryptografia-c</link>
<description>

&lt;p&gt;Aktualnie tworzę aplikacje w c++ i potrzebuje, aby zapisywała hasło, które użytkownik&amp;nbsp;wpisze&amp;nbsp;do pliku w, którym będzie zaszyfrowane hasło. Próbowałem użyć XOR, ale nie odszyfrowywało go po prawnie, bo dodawało zawsze na koniec odszyfrowanego hasła jakiś znak np. Password^.&lt;/p&gt;



&lt;p&gt;Może ktoś podpowie jak to zrobić.&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
string XOR(string data, char key[]) {
    char *xorKey = key;
    string xors = data;
    int len = data.size();
    for (int i = 0; i &amp;lt; len; i++) {
        xors[i] = data[i] ^ *xorKey;

    }
    return xors;
}
class Configuration {
public:
    static void SetPassword(string password) {
        char key[] = &quot;Password&quot;;
        ofstream File(&quot;password.dat&quot;);
        File &amp;lt;&amp;lt; XOR(password, key);
        File.close();
    }
   
};
cout &amp;lt;&amp;lt; &quot;Create password &quot;
 string userpass;
        cin &amp;gt;&amp;gt; userpass;
        Configuration::SetPassword(userpass);

// jesli stworzy juz haslo
string dec = XOR(readedfile,key);

        cout &amp;lt;&amp;lt; dec &amp;lt;&amp;lt; endl;
        while (1) {
            cout &amp;lt;&amp;lt; &quot;Write a password:&quot;;
            string check;
            cin &amp;gt;&amp;gt; check;
            if (check == dec) {
                cout &amp;lt;&amp;lt; &quot;Correct password&quot;;
                break;
            }
            else {
                cout &amp;lt;&amp;lt; &quot;Invalid password!\n&quot;;
            }

        }
&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/552197/kryptografia-c</guid>
<pubDate>Fri, 08 Oct 2021 14:31:47 +0000</pubDate>
</item>
<item>
<title>Optymalizacja kodu: Policzenie XOR na podanym przedziale</title>
<link>https://forum.pasja-informatyki.pl/551800/optymalizacja-kodu-policzenie-xor-na-podanym-przedziale</link>
<description>

&lt;p&gt;&lt;strong&gt;Oto treść zadania:&lt;/strong&gt;
&lt;br&gt;
Jankowi, dzięki intensywnym przygotowaniom, udało się dostać do finału OMJ. Oczywiście jako finalista Olimpiady umie już dodawać, więc w ramach przygotowań do finału wymyślił sobie nowe ćwiczenie: zapisuje na
&lt;br&gt;
kartce n liczb, a następnie wybiera dwie liczby całkowite a, b i oblicza XOR wszystkich zapisanych liczb od a-tej
&lt;br&gt;
do b-tej włącznie.
&lt;br&gt;
Niestety, finał OMJ został odwołany, więc Janek nie będzie miał możliwości sprawdzenia swoich umiejętności
&lt;br&gt;
na zawodach. Pomóż mu i napisz program obliczający poprawne odpowiedzi.
&lt;br&gt;
&lt;strong&gt;WEJŚCIE&lt;/strong&gt;
&lt;br&gt;
W pierwszym wierszu wejścia znajdują się dwie liczby całkowite n i q (1 ¬ n, q ¬ 106
&lt;br&gt;
) oznaczające odpowiednio
&lt;br&gt;
ile liczb zapisał Janek na kartce i ile pytań chce zadać.
&lt;br&gt;
W drugim wierszu znajduje się n liczb całkowitych z przedziału h0, 106
&lt;br&gt;
i – liczby zapisane przez Janka na kartce.
&lt;br&gt;
W każdym z następnych q wierszy znajdują się dwie liczby całkowite a i b (1 ¬ a ¬ b ¬ n), które oznaczają
&lt;br&gt;
odpowiednio numer pierwszej i ostatniej liczby przedziału, na którym należy policzyć XOR.
&lt;br&gt;
&lt;strong&gt;WYJŚCIE&lt;/strong&gt;
&lt;br&gt;
Należy wypisać odpowiedzi na kolejne pytania Janka, każde w oddzielnej linii.
&lt;br&gt;
&lt;strong&gt;PRZYKŁAD&lt;/strong&gt;
&lt;br&gt;
&lt;span style=&quot;text-decoration: underline;&quot;&gt;Wejście:&lt;/span&gt;
&lt;br&gt;
6 2
&lt;br&gt;
31 13 16 21 0 1
&lt;br&gt;
1 6
&lt;br&gt;
2 5
&lt;br&gt;
&lt;span style=&quot;text-decoration: underline;&quot;&gt;Wyjście:&lt;/span&gt;
&lt;br&gt;
22
&lt;br&gt;
8&lt;/p&gt;



&lt;p&gt;Oto mój kod, który otrzymuje 40 punktów:&lt;/p&gt;



&lt;pre class=&quot;brush:plain;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
using namespace std;

int main() {
    int n, m;
    cin &amp;gt;&amp;gt; n &amp;gt;&amp;gt; m;
    int t[n];
    for(int i = 0; i &amp;lt; n; i++){
        cin &amp;gt;&amp;gt; t[i];
    }
    int sp[n];
    sp[0] = t[0];
    for(int i = 1; i &amp;lt; n; i++){
        sp[i] = sp[i - 1] ^ t[i];
    }
    int a, b;
    while(m--){
        cin &amp;gt;&amp;gt; a &amp;gt;&amp;gt; b;
        if(a == 1){
            cout &amp;lt;&amp;lt; sp[b-1] &amp;lt;&amp;lt; endl;
        }
        else {
            cout &amp;lt;&amp;lt; (sp[b-1] ^ sp[a-2]) &amp;lt;&amp;lt; endl;
        }
    }
}&lt;/pre&gt;



&lt;p&gt;Przekroczony został limit czasu. Czy ktoś pomógłby mi zoptymalizować kod?
&lt;br&gt;

&lt;br&gt;
&lt;strong&gt;Nie&lt;/strong&gt; chodzi o to, że używam cout zamiast printf itp.&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/551800/optymalizacja-kodu-policzenie-xor-na-podanym-przedziale</guid>
<pubDate>Sat, 02 Oct 2021 08:08:43 +0000</pubDate>
</item>
<item>
<title>Szyfrowanie XOR</title>
<link>https://forum.pasja-informatyki.pl/537774/szyfrowanie-xor</link>
<description>Ktoś jest mi w stanie wyjaśnić jak zaszyfrować stringa o długości 5 bajtów kluczem 4-bajtowym?&lt;br /&gt;
&lt;br /&gt;
Na necie milion przykładów ale nigdzie nie tłumaczą co w przypadku jeśli tekst nie jest &amp;nbsp;wielokrotnością klucza.</description>
<category>SPOJ</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/537774/szyfrowanie-xor</guid>
<pubDate>Fri, 16 Apr 2021 13:57:00 +0000</pubDate>
</item>
<item>
<title>Działanie XOR dla dowolnej ilości danych</title>
<link>https://forum.pasja-informatyki.pl/534920/dzialanie-xor-dla-dowolnej-ilosci-danych</link>
<description>Cześć, potrzebuje pomocy w zadaniu odnośnie utworzenia schematu blokowego działania bramki XOR dla dowolnej ilości danych wejściowych. Przejrzałam chyba wszystko, ale zupełnie nie mam pojęcia jak się za to zabrać. Jestem w stanie zrobić dwuwejściową, ale dla wcześniej wspomnianej dowolnej ilości danych nie jestem w stanie ogarnąć.&lt;br /&gt;
&lt;br /&gt;
Z góry dzięki za jakąkolwiek pomoc :)</description>
<category>Matematyka, fizyka, logika</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/534920/dzialanie-xor-dla-dowolnej-ilosci-danych</guid>
<pubDate>Sun, 28 Mar 2021 12:33:54 +0000</pubDate>
</item>
<item>
<title>Utrata danych.</title>
<link>https://forum.pasja-informatyki.pl/513260/utrata-danych</link>
<description>

&lt;p&gt;Cześć, podczas pobierania zaszyfowanego,&amp;nbsp;pliku z serwera FTP dzieje się utrata danych(?), tzn załóżmy, że szyfruje notatnik o zawartości&lt;/p&gt;



&lt;hr&gt;


&lt;pre class=&quot;brush:cpp;&quot;&gt;
ala ma kota 
kota 
ma test&lt;/pre&gt;



&lt;hr&gt;


&lt;p&gt;zostaje on wysłany na serwer, ale po pobraniu i odszyfrowaniu go zamiast tego co jest u góry mamy taką zawartość notatnika&lt;/p&gt;



&lt;hr&gt;


&lt;pre class=&quot;brush:cpp;&quot;&gt;
B[ABUZZ^B_DFUCTIP[Jq
kota 
ma test&lt;/pre&gt;



&lt;hr&gt;


&lt;p&gt;Sposobem&amp;nbsp;którym szyfruje pliki jest&amp;nbsp;&amp;nbsp;&lt;strong&gt;XOR,&amp;nbsp;&lt;/strong&gt;pobieram przy pomocy (FtpGetFile), wysyłam przy pomocy (FtpPutFile), każdy jest ustawiony na tryb &lt;strong&gt;BINARY.&amp;nbsp;&lt;/strong&gt;Dzięki za każdą pomoc! (wszystkie operacje dzieją się w programie. Szyforwanie/Odszyfrowanie).&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;edit;&lt;/p&gt;



&lt;p&gt;Kod szyforwania&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;

&amp;nbsp;&lt;/pre&gt;



&lt;p&gt;FtpGetFile&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
FtpGetFile(hFtp, pobierz, plikWyjsciowyEnterText, TRUE, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY, 0)&lt;/pre&gt;



&lt;p&gt;FtpPutFile&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
FtpPutFile(hFtp, appdata, sccc2, FTP_TRANSFER_TYPE_BINARY, 0);&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/513260/utrata-danych</guid>
<pubDate>Sat, 24 Oct 2020 19:25:42 +0000</pubDate>
</item>
<item>
<title>Zignorowanie charactera przez warunek.</title>
<link>https://forum.pasja-informatyki.pl/378059/zignorowanie-charactera-przez-warunek</link>
<description>

&lt;p&gt;Witam mam swój algorytm alternatywy rozłącznej, I z tym wiąże się mały problem&amp;nbsp;jak zrobić w tych warunkach co appendują stringa coś ala filter. Mam ciąg binarny podzielony przecinkami i chciałbym aby warunek zignorował ten przecinek przy jego fizycznym byciu w ciągu znaków&amp;nbsp;i sprawdzał kolejna index'y stringów. Z góry dziękuje za pomoc&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
        for i in range(len(klucz)):
                for x in szyfr.find(s,&quot;,&quot;):
                    if(key_i == x):
                        main_cipher.insert(x,&quot;,&quot;)
                        print(&quot;Dodaje przecinek na indexie: &quot;+str(x))
                if(klucz[key_i] != s[key_i]):
                        main_cipher.append(&quot;1&quot;)
                        print(&quot;Dodaje 1 na indexie =&amp;gt; &quot;+str(key_i)+&quot; z porówniania cyfry klucza: &quot;+str(klucz[key_i])+&quot;, oraz tekstu: &quot;+str(s[key_i]))
                        key_i += 1
                else:
                        main_cipher.append(&quot;0&quot;)
                        print(&quot;Dodaje 0 na indexie =&amp;gt; &quot;+str(key_i)+&quot; z porówniania cyfry klucza: &quot;+str(klucz[key_i])+&quot;, oraz tekstu: &quot;+str(s[key_i]))
                        key_i += 1&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/378059/zignorowanie-charactera-przez-warunek</guid>
<pubDate>Wed, 05 Sep 2018 16:33:27 +0000</pubDate>
</item>
<item>
<title>[C++] operatory binarne, przesunięcie bitowe, not</title>
<link>https://forum.pasja-informatyki.pl/359493/c-operatory-binarne-przesuniecie-bitowe-not</link>
<description>

&lt;p&gt;Witam.&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Napisałem dla testu taki kod:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;

#define L_SH(x,y) ((x)&amp;lt;&amp;lt;(y))
#define R_SH(x,y) ((x)&amp;gt;&amp;gt;(y))

int main(){
    std::cout&amp;lt;&amp;lt;&quot;Enter math expression: \n&quot;;
    std::cout&amp;lt;&amp;lt; (5 | 3) &amp;lt;&amp;lt;&quot;\n&quot;; // 0101 | 0011 = 0111 (7)
    std::cout&amp;lt;&amp;lt; (5 &amp;amp; 3) &amp;lt;&amp;lt;&quot;\n&quot;; // 0101 &amp;amp; 0011 = 0001 (1)
    std::cout&amp;lt;&amp;lt; (5 ^ 3) &amp;lt;&amp;lt;&quot;\n&quot;; // 0101 ^ 0011 = 0100 (4)
    std::cout&amp;lt;&amp;lt; ~5 &amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt; ~3 &amp;lt;&amp;lt;&quot;\n&quot;; // ~0101 ~0011 = 1010 (10) 1100 (12)
    std::cout&amp;lt;&amp;lt; ~-5 &amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt; ~-3 &amp;lt;&amp;lt;&quot;\n\n&quot;; // ?

    std::cout&amp;lt;&amp;lt;&quot;LEFT: 20 - 1, 2\n&quot;;
    std::cout&amp;lt;&amp;lt; L_SH(20, 1) &amp;lt;&amp;lt;&quot;  &quot;&amp;lt;&amp;lt; L_SH(20, 2) &amp;lt;&amp;lt;&quot;\n\n&quot;; // 10100 &amp;lt;&amp;lt;1 01000 (8) - 10100 &amp;lt;&amp;lt;2 10000 (16)
    std::cout&amp;lt;&amp;lt;&quot;RIGHT: 20 - 1, 2\n&quot;;
    std::cout&amp;lt;&amp;lt; R_SH(20, 1) &amp;lt;&amp;lt;&quot;  &quot;&amp;lt;&amp;lt; R_SH(20, 2) &amp;lt;&amp;lt;&quot;\n\n&quot;; // 10100 1&amp;gt;&amp;gt; 01010 (10) - 10100 2&amp;gt;&amp;gt; 00101 (5)

}
&lt;/pre&gt;



&lt;p&gt;Mam taki output:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
Enter math expression:
7 (or)
1 (and)
6 (xor)
-6 -4 (not +)
4 2 (not -)

LEFT: 20 - 1, 2 (bit shift)
40  80 

RIGHT: 20 - 1, 2 (bit shift)
10  5&lt;/pre&gt;



&lt;p&gt;(to co w nawiasach dopisałem dla łatwiejszej orientacji)&lt;/p&gt;



&lt;p&gt;O ile or, and, xor, not z dodatnim rozumiem, o tyle nie wiem dlaczego not z ujemnym daje wyniki 4, 2. Czy mógłby mi ktoś wyjaśnić jak mniej więcej powinna wyglądać treść tamtego komentarza? Dlaczego wyniki są takie, a nie inne?&lt;/p&gt;



&lt;p&gt;Dodatkowo. Zdziwiło mnie kiedy przy komentowaniu lewego przesunięcia bitowego wychodziły mi te wyniki. Po włączeniu programu okazało się, iż byłem w błędzie i wyniki są prawidłowe. Czy mógłby mnie ktoś wyprowadzić z błędu?&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Pozdrawiam.&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/359493/c-operatory-binarne-przesuniecie-bitowe-not</guid>
<pubDate>Wed, 20 Jun 2018 12:30:10 +0000</pubDate>
</item>
<item>
<title>Znajdź wartość, która występuje w nieparzystej liczby elementów C++</title>
<link>https://forum.pasja-informatyki.pl/149109/znajdz-wartosc-ktora-wystepuje-w-nieparzystej-liczby-elementow-c</link>
<description>

&lt;p&gt;Kod:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;

using namespace std;

int solution(vector&amp;lt;int&amp;gt; &amp;amp;A)
{
    int result = 0;
    for(int i : A)
    {
        result ^= i;
    }
    return result;
}

int main()
{
    vector&amp;lt;int&amp;gt; vec {9,3,9,3,9,6,9};
    cout &amp;lt;&amp;lt; solution(vec) &amp;lt;&amp;lt; endl;
    return 0;
}
&lt;/pre&gt;



&lt;p&gt;Może mi ktoś powiedzieć z jakich ot własności liczb binarnych korzysta ta funkcja, że zwraca dobry wynik? Bo ja bym nie wpadł, że wystarczy xorować... Dlaczego to działa?&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Najpierw result ma 0, potem 9, nastepnie 10. Jak się to ma do tych liczb w vektorze?&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Strona z zadaniem&amp;nbsp;&lt;a href=&quot;https://codility.com/programmers/task/odd_occurrences_in_array/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://codility.com/programmers/task/odd_occurrences_in_array/&lt;/a&gt;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/149109/znajdz-wartosc-ktora-wystepuje-w-nieparzystej-liczby-elementow-c</guid>
<pubDate>Thu, 09 Jun 2016 21:00:24 +0000</pubDate>
</item>
<item>
<title>XOR C++ Prośba o wytłumaczenie :)</title>
<link>https://forum.pasja-informatyki.pl/19910/xor-c-prosba-o-wytlumaczenie</link>
<description>Witam !&lt;br /&gt;
&lt;br /&gt;
Robiąc jedno z zadań na spoju natknąłem się na porblem związany ze Xorem :) Stąd moja prośba czy moglibyście wytłumaczyć mi czy tam właściwie jest Xor jak się go wykorzystuje itp. Tylko proszę was nie wklejajcie linków do innych stron bo sam już je obczaiłem i nawet one nie pomogły mi zrozumieć czym tak naprawdę jest XOR :)&lt;br /&gt;
&lt;br /&gt;
Mam jeszcze jedną prośbę na jakiej zasadzie działa te zamienianie 2 licz: &lt;br /&gt;
&lt;br /&gt;
x^=y;&lt;br /&gt;
&lt;br /&gt;
y^=x;&lt;br /&gt;
&lt;br /&gt;
x^=y;&lt;br /&gt;
&lt;br /&gt;
Z góry dziękuję za odpowiedź :)</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/19910/xor-c-prosba-o-wytlumaczenie</guid>
<pubDate>Tue, 12 May 2015 17:13:34 +0000</pubDate>
</item>
</channel>
</rss>