{"id":129,"date":"2011-07-30T12:58:26","date_gmt":"2011-07-30T12:58:26","guid":{"rendered":"http:\/\/piatkosia.k4be.pl\/wordpress\/?p=129"},"modified":"2011-12-30T02:34:36","modified_gmt":"2011-12-30T02:34:36","slug":"zabawa","status":"publish","type":"post","link":"https:\/\/piatkosia.k4be.pl\/wordpress\/2011\/07\/30\/zabawa\/","title":{"rendered":"zabawa"},"content":{"rendered":"<p>Ostatnio si\u0119 bawi\u0142am w kodzie. (Thx idlecode za podsuni\u0119cie pomys\u0142u) i wysz\u0142o mi co\u015b takiego. Poziom mo\u017ce niski, ale przynajmniej dzia\u0142a. Jak co pejstn\u0119:<\/p>\n<pre class=\"brush:cpp; collapse:true\">#include &lt;iostream&gt;\r\n#include &lt;string&gt;\r\n#include &lt;cstdlib&gt;\r\n using namespace std;\r\n\r\n union kluczyk{\r\n        long knum;\r\n        char ktab[4];\r\n };\r\n\r\n int main(){\r\n\r\n     string napis;\r\n     string wynik;\r\n\r\n     unsigned int licznik_klucza = 0;\r\n     unsigned int licznik_pola = 0;\r\n\r\n     kluczyk kej;\r\n        cout&lt;&lt;\"\\nPodaj liczb\u0119 b\u0119d\u0161c\u0161 kluczem: \";\r\n        cin&gt;&gt;kej.knum;\r\n\/\/        cout&lt;&lt;\"Wczytano \"&lt;&lt;kej.knum&lt;&lt; \"inaczej: \\n\";\r\n\/\/        for (int i = 0; i&lt;4 i++){\r\n\/\/            cout&lt;&lt;kej.ktab[i]&lt;&lt;endl;\r\n\/\/        } \/\/przesz\u0142o\r\n\r\n        cout&lt;&lt;\"\\nPodaj tekst do zaszyfrowania: \";\r\n        cin&gt;&gt;napis;\r\n       \/\/ cout&lt;&lt;\"Wczytano \"&lt;&lt;napis; \/*Napis wczytany prawid\u0142owo*\/\r\n        do{\r\n            licznik_klucza = licznik_pola % 4;\r\n            cout&lt;&lt;licznik_klucza;\r\n            wynik.resize(licznik_pola+1, '0');\r\n            wynik.at(licznik_pola) = kej.ktab[licznik_klucza] ^ napis.at(licznik_pola);\r\n            licznik_pola ++;\r\n\r\n        }while (licznik_pola &lt; napis.length());\r\n        \/\/while (napis.at(licznik_pola) != '\\0');\r\n        cout&lt;&lt;\"wynik: \"&lt;&lt;wynik&lt;&lt;endl;\r\n }<\/pre>\n<p>A to wersja dla plik\u00f3w<\/p>\n<pre class=\"brush:cpp; collapse: true\">#include &lt;iostream&gt;\r\n#include &lt;fstream&gt;\r\n#include &lt;string&gt;\r\n#include &lt;cstdlib&gt;\r\n#include &lt;cstdio&gt;\r\n\r\nusing namespace std;\r\n\r\nunion kluczyk{\r\n        long long knum;\r\n        char ktab[8];\r\n };\r\n\r\n int main(int argc, char* argv[]){\r\n\/\/------------------------przygotowanie zmiennych -----------------------------\r\n    fstream zrodlo, cel;\r\n\r\n \/\/--------------Sprawdzenie poprawno\u009cci ilo\u009cci argument\u00f3w--------------------\r\n    if ((argc &lt;2) || (argc &gt; 3)){\r\n            cerr&lt;&lt;\"\\nB\u0142\u0105d wywo\u0142ania. Spr\u00f3buj \"&lt;&lt;argv[0]&lt;&lt;\" --help\";\r\n            exit(1); \/\/B\u0142\u0105d wywo\u0142ania\r\n        }\r\n\r\n\/\/----------------Przygotowanie danych dla szyfrowania------------------------------\r\n    unsigned int licznik_klucza = 0;\r\n    unsigned int licznik_pola = 0;\r\n    kluczyk kej; \/\/Tu b\u0119d\u0119 przechowywa\u0107 klucz, pobierany w takiej formie jaka nam pasi:)\r\n    kej.knum = 0;\r\n    if (!((string)argv[1]==\"--help\")){   \/\/Przy helpie nie ma potrzeby podawania klucza;)\r\n    cout&lt;&lt;\"\\nPodaj klucz (liczbowy, im wi\u0119ksza tym lepiej, \\nale nie wi\u0119ksza ni\u017c 9223372036854775807): \";\r\n    cin&gt;&gt;kej.knum;\r\n    cout&lt;&lt;endl;\r\n}\r\n\/\/------------Dane gotowe-------------------------------------------------------------\r\n\r\n     if (argc ==2){\r\n            if ((string)argv[1]==\"--help\"){\r\n                cout&lt;&lt;\"Program szyfruje plik \u009fr\u00f3d\u0142owy \";\r\n                cout&lt;&lt;endl&lt;&lt;\"Wywo\u0142anie: \"&lt;&lt;argv[0]&lt;&lt;\" &lt;plik_\u009fzr\u00f3d\u0142owy&gt; [plik_wynikowy]\"&lt;&lt;endl;\r\n                cout&lt;&lt;\"Plik \u009fzr\u00f3d\u0142owy musi by\u0107 podany i musi istnie\u0107. \\n\";\r\n                cout&lt;&lt;\"W przypadku braku podania celu, wypluwa zawarto\u009c\u0107 na ekran (ale to krzaki)\\n\";\r\n                cout&lt;&lt;\"Najlepiej podawa\u0107 du\u017ce liczby.\\n\";\r\n                exit(0); \/\/poprawne zako\u0144czenie funkcji przy helpie\r\n            }\r\n\/\/----------------Obs\u0142uga szyfrowania z wywalaniem na ekran--------------------\r\n            zrodlo.open(argv[1], ios::in|ios::binary);\r\n            if (!zrodlo.good()){\r\n                cerr&lt;&lt;\"\\nB\u0142\u0105d otwarcia pliku.\";\r\n                exit(2); \/\/b\u0142\u0105d otwarcia pliku \u009fr\u00f3d\u0142owego\r\n            }\r\n            \/\/w\u0142a\u009cciwe przeszyfrowanie z wypluciem na ekran\r\n            char znak, wynik;\r\n            unsigned int kolumna;\r\n            cout&lt;&lt;\"\\nPodaj szeroko\u009c\u0107 kolumny przy wy\u009cwietlaniu: \";\r\n            cin&gt;&gt;kolumna;\r\n            while (!zrodlo.eof()){\r\n                    licznik_klucza = licznik_pola % 8;\r\n                    zrodlo.get(znak);\r\n                    wynik = kej.ktab[licznik_klucza] ^ znak;\r\n                    licznik_pola ++;\r\n                    if ((licznik_pola % kolumna) == 0) cout&lt;&lt;endl; \/\/\u017ceby \u0142adniej wy\u009cwietla\u0142o\r\n                    cout&lt;&lt;wynik;\r\n            } \/\/od while (!zrodlo.eof())\r\n\r\n            zrodlo.close();\r\n            exit(0);\r\n     } \/\/od dw\u00f3jki w argc\r\n\r\n\/\/-----------------------------teraz wywalamy z pliku do pliku:) ---------------------------\r\n\r\n        zrodlo.open(argv[1], ios::in|ios::binary);\r\n        if (!zrodlo.good()){\r\n            cerr&lt;&lt;\"\\nB\u0142\u0105d otwarcia pliku.\";\r\n            exit(2); \/\/b\u0142\u0105d otwarcia pliku \u009fr\u00f3d\u0142owego\r\n        }\r\n\r\n        cel.open(argv[2], ios::in);\r\n        bool nadpisac = false;\r\n        char a;\r\n        if(cel){\r\n            cout&lt;&lt;\"\\nPlik docelowy istnieje. Nadpisa\u0107? T\/N: \";\r\n            cin&gt;&gt;a;\r\n            while(1){\r\n            if (toupper(a) == 'T'){\r\n                nadpisac = true;\r\n                break;\r\n            }\r\n            else if (toupper(a) == 'N'){\r\n                break;\r\n                }\r\n            else {\r\n                cout&lt;&lt;\"\\nNadpisa\u0107? T\/N:  \";\r\n                cin&gt;&gt;a;\r\n                continue;\r\n            }\r\n\r\n        }\r\n\r\n    }\r\n\r\n    cel.close();\r\n    if ((!cel) || nadpisac ==true){\r\n        cel.open(argv[2], ios::out|ios::binary);\r\n        char znak, wynik;\r\n         while (!zrodlo.eof()){\r\n                    licznik_klucza = licznik_pola % 8;\r\n                    zrodlo.get(znak);\r\n                    wynik = kej.ktab[licznik_klucza] ^ znak;\r\n                    licznik_pola ++;\r\n                    cel.put(wynik);\r\n            } \/\/od while (!zrodlo.eof())\r\n\r\n            zrodlo.close();\r\n            cel.close();\r\n            cout&lt;&lt;\"\\nZaszyfrowano. Wynik zapisano w \"&lt;&lt;argv[2]&lt;&lt;\".\\n\";\r\n            cout&lt;&lt;\"Odszyfrujesz tak jak szyfrowa\u0142e\u009c, je\u017celi podasz ten sam klucz.\";\r\n\r\n    }\r\n    else {\r\n        cerr&lt;&lt;\"Plik docelowy istnieje, a nadpisa\u0107 zabroniono\";\r\n        exit(3);\r\n    }\r\n    return 0;\r\n\r\n } \/\/od maina<\/pre>\n<p>\ud83d\ude09 \u00a0No dobra A tu macie ca\u0142o\u015b\u0107, ze skompilowanymi binarkami do windy. Polecam te z 2, bo zosta\u0142y przekonwertowane, by nie krzaczy\u0142y w terminalu:)<br \/>\n<a href=\"http:\/\/piatkosia.k4be.pl\/pliki\/projekt.7z\">SSIJ_Z_T\u0104D<\/a><br \/>\n&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ostatnio si\u0119 bawi\u0142am w kodzie. (Thx idlecode za podsuni\u0119cie pomys\u0142u) i wysz\u0142o mi co\u015b takiego. Poziom mo\u017ce niski, ale przynajmniej dzia\u0142a. Jak co pejstn\u0119: #include&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/piatkosia.k4be.pl\/wordpress\/2011\/07\/30\/zabawa\/\">Lecim dalej<span class=\"screen-reader-text\">zabawa<\/span> <i class=\"fas fa-angle-right\"><\/i><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[50,49,24],"tags":[211,38,72,71,206,70,69,73],"class_list":["post-129","post","type-post","status-publish","format-standard","hentry","category-c","category-programowanie","category-techniczne","tag-c","tag-kodowanie","tag-obsluga-ciagow-znakow","tag-obsluga-plikow","tag-pomysly","tag-szyfrowanie","tag-xor","tag-zabawa","entry"],"_links":{"self":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/129","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/comments?post=129"}],"version-history":[{"count":23,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/129\/revisions"}],"predecessor-version":[{"id":337,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/129\/revisions\/337"}],"wp:attachment":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/media?parent=129"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/categories?post=129"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/tags?post=129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}