Liczby pierwsze - algorytm RSA

Wielkość: px
Rozpocząć pokaz od strony:

Download "Liczby pierwsze - algorytm RSA"

Transkrypt

1 Artykuł pobrano ze strony eioba.pl Liczby pierwsze - algorytm RSA W roku 1977 trzej profesorowie z MIT w USA opublikowali nowy rodzaj szyfrowania danych, który nazwano od pierwszych liter ich nazwisk systemem RSA. R.L.Rivest Adi Shamir L. Adleman Twórcy algorytmu RSA W roku 1977 trzej profesorowie z MIT w USA, Ronald L. Rivest, Adi Shamir i Leonard Adleman, opublikowali nowy rodzaj szyfrowania danych, który nazwano od pierwszych liter ich nazwisk systemem RSA. Jest to niesymetryczny algorytm szyfrujący, którego zasadniczą cechą są dwa klucze: publiczny do kodowania informacji oraz prywatny do jej odczytywania. Klucz publiczny (można go udostępniać wszystkim zainteresowanym) umożliwia jedynie zaszyfrowanie danych i w żaden sposób nie ułatwia ich odczytania, nie musi więc być chroniony. Dzięki temu firmy dokonujące transakcji poprzez sieć Internet mogą zapewnić swoim klientom poufność i bezpieczeństwo. Drugi klucz (prywatny, przechowywany pod nadzorem) służy do odczytywania informacji zakodowanych przy pomocy pierwszego klucza. Klucz ten nie jest udostępniany publicznie. System RSA umożliwia bezpieczne przesyłanie danych w środowisku, w którym może dochodzić do różnych nadużyć. Bezpieczeństwo oparte jest na trudności rozkładu dużych liczb na czynniki pierwsze. Załóżmy, iż dysponujemy superszybkim komputerem, który jest w stanie sprawdzić podzielność miliarda dużych liczb w ciągu jednej sekundy. Aby złamać szyfr RSA należy rozbić klucz publiczny na dwie liczby pierwsze będące jego dzielnikami. Znajomość tych liczb pozwala rozszyfrować każdą informację zakodowaną kluczem prywatnym i publicznym. Brzmi dosyć prosto. Jednakże nie ma prostej metody rozbijania dużych liczb na czynniki pierwsze. Nie istnieje żaden wzór, do którego podstawiamy daną liczbę i w wyniku otrzymujemy wartości jej czynników pierwszych. Należy je znaleźć testując podzielność kolejnych liczb. Z rozważań o liczbach pierwszych wynika, iż w przypadku dwóch różnych dzielników pierwszych jeden musi leżeć poniżej wartości pierwiastka z danej liczby, a drugi powyżej (dlaczego?). Zatem, aby go znaleźć musimy wyliczyć pierwiastek z rozkładanej liczby, a następnie testować podzielność przez liczby nieparzyste leżące poniżej tego pierwiastka. Statystycznie poszukiwany czynnik pierwszy powinien znajdować się w górnej połówce zakresu od 2 do pierwiastka z n. Ile działań musimy wykonać? Policzmy. Klucz 128 bitowy. Pierwiastek jest liczbą 64 bitową. W zakresie od 2 do 2 64 co druga

2 liczba jest nieparzysta, zatem jest ich około 2 64 / 2 = Ponieważ interesuje nas tylko górna połówka, to ilość liczb do sprawdzenia jest dwa razy mniejsza, czyli wynosi 2 63 / 2 = Ile czasu zajmie naszemu superkomputerowi sprawdzenie podzielności przez około 2 62 liczb, jeśli w ciągu 1 sekundy wykonuje on miliard sprawdzeń? Odpowiedź brzmi: zajmie to około 2 62 / 10 9 = sekund = = minut = godzin = dni = 146 lat Czy sądzisz, że ktoś będzie czekał przez prawie dwa życia na złamanie szyfru? Zatem można podać do publicznej wiadomości liczbę będącą iloczynem dwóch dużych liczb pierwszych i mieć prawie pewność, iż nikt jej nie rozbije na czynniki pierwsze w rozsądnym czasie. Ostatecznie zamiast 128 bitów możemy zwiększyć klucz do np bitów, a wtedy czas łamania szyfru liczy się miliardami miliardów... miliardów lat. Algorytm RSA składa się z trzech podstawowych kroków: I II Fazy algorytmu RSA Generacja klucza publicznego i tajnego. Klucz publiczny jest przekazywany wszystkim zainteresowanym i umożliwia zaszyfrowanie danych. Klucz tajny umożliwia rozszyfrowanie danych zakodowanych kluczem publicznym. Jest trzymany w ścisłej tajemnicy. Użytkownik po otrzymaniu klucza publicznego, np. poprzez sieć Internet, koduje za jego pomocą swoje dane i przesyła je w postaci szyfru RSA do adresata dysponującego kluczem tajnym, np. do banku, firmy komercyjnej, tajnych służb. Klucz publiczny nie musi być chroniony, ponieważ nie umożliwia on rozszyfrowania informacji - proces szyfrowania nie jest odwracalny przy pomocy tego klucza. Zatem nie ma potrzeby jego ochrony i może on być powierzany wszystkim zainteresowanym bez ryzyka złamania kodu. III Adresat po otrzymaniu zaszyfrowanej wiadomości odczytuje ją za pomocą klucza tajnego. Generacja klucza publicznego i tajnego dla algorytmu RSA Znajdź dwie duże liczby pierwsze (mające np. po 1024 bity). Oznacz je jako p i q. Istnieją I specjalne algorytmy generujące duże liczby pierwsze. Oblicz: Ø = (p - 1) (q - 1) oraz II n = p q Wygenerowane liczby pierwsze usuń, aby nie wpadły w niepowołane ręce. Ø to tzw. funkcja Eulera, n jest modułem. Wykorzystując odpowiednio algorytm Euklidesa znajdź liczbę e, która jest względnie pierwsza z III wyliczoną wartością funkcji Eulera Ø (tzn. NWD(e, Ø) = 1) Liczba ta powinna również spełniać nierówność 1 < e < n. Nie musi ona być pierwsza lecz nieparzysta. Oblicz liczbę odwrotną modulo Ø do liczby e, czyli spełniającą równanie d e mod Ø = 1. IV Można to zrobić przy pomocy rozszerzonego algorytmu Euklidesa, który umieściliśmy w naszym opracowaniu. Klucz publiczny jest parą liczb (e, n), gdzie e nazywa się publicznym wykładnikiem. Możesz go V przekazywać wszystkim zainteresowanym. Klucz tajny to (d, n), gdzie d nazywa się prywatnym wykładnikiem. Klucz ten należy VI przechowywać pod ścisłym nadzorem.

3 p = 13 q = 11 Ø = 120 n = 143 e = 7 d = 103 Wybieramy dwie dowolne liczby pierwsze. W naszym przykładzie nie będą one duże, aby nie utrudniać obliczeń. W rzeczywistości liczby te powinny być ogromne. Obliczamy Ø = (p - 1) (q - 1), czyli tzw. funkcję Eulera: Ø = (13-1) (11-1) = = 120 Obliczamy moduł n: n = p q = = 143 Wyznaczamy wykładnik publiczny e. Ma on być względnie pierwszy z Ø czyli z liczbą 120. Warunek ten spełnia, np. liczba 7. Wyznaczamy następnie wykładnik prywatny, który ma być odwrotnością modulo Ø liczby e, czyli d 7 mod 120 = 1. Liczbą spełniającą ten warunek jest 103 (7,143) Klucz publiczny (e, n) (103,143) Klucz tajny (d, n) Szyfrowanie RSA I Otrzymujesz od adresata klucz publiczny w postaci pary liczb (e, n). Wiadomość do zaszyfrowania zamieniasz na liczby naturalne t, które muszą spełniać nierówność 0 < t < n Można tutaj skorzystać np. z łączenia kodów znaków. Oczywiście adresat musi znać użyty przez II ciebie sposób przekształcenia tekstu w liczbę, aby mógł on później odtworzyć otrzymaną wiadomość. Zwykle nie ma z tym problemu, ponieważ nadawca i odbiorca stosują wspólne oprogramowanie, które troszczy się za ciebie o takie szczegóły techniczne. Na tak otrzymanych liczbach wykonujesz operację szyfrowania i otrzymujesz liczby III c = t e mod n. Liczby c są zaszyfrowaną postacią liczb t i przekazuje się je adresatowi wiadomości. Klucz (e, n) IV umożliwił ich zaszyfrowanie, lecz nie pozwala ich rozszyfrować. e = 7 Otrzymaliśmy klucz publiczny (e, n). Przy jego pomocy możemy zakodować liczby od 0 do n = Zauważ, iż liczby 0 oraz 1 nie zostaną zakodowane (dlaczego?). c = 7 Załóżmy, iż chcemy przesłać adresatowi zaszyfrowaną liczbę t = 123. W tym celu musimy obliczyć wartość wyrażenia: c = mod 143 = mod 143 = 7 Wynik jest zaszyfrowaną liczbą 123. Przesyłamy go do adresata. Rozszyfrowywanie RSA Jesteś adresatem zaszyfrowanych wiadomości. Wcześniej wszystkim korespondentom przesłałeś wygenerowany klucz publiczny (e,n), za pomocą którego mogą oni szyfrować i przesyłać ci swoje I dane. Otrzymujesz więc zaszyfrowaną wiadomość w postaci liczb naturalnych c, które muszą spełniać warunek: 0 < c < n Liczbę c przekształcasz na pierwotną wartość t stosując wzór: II t = c d mod n Z otrzymanej liczby t odtwarzasz wg ustalonego systemu znaki tekstu. Teraz możesz odczytać III przesłaną wiadomość.

4 d = 103 Otrzymaliśmy zakodowaną wiadomość o wartości 7. Jesteśmy w posiadaniu klucza n = 143 prywatnego, który służy do rozszyfrowywania wiadomości zakodowanych kluczem c = 7 publicznym. t = 123 Wykonujemy następujące operacje: t = mod 143 Potęga jest zbyt duża, aby można ją było w normalny sposób obliczyć (języki programowania mają zwykle ograniczenia co do wielkości liczb całkowitych, np. w Pascalu liczby te nie mogą przekraczać wartości ). Jednakże nas nie interesuje wartość liczbowa potęgi, a jedynie reszta z dzielenia jej przez 143. Możemy więc rozłożyć potęgę na iloczyn składników o wykładnikach równych kolejnym potęgom liczby dwa: mod 143 = mod 143 = (7 64 mod 143) (7 32 mod 143) (7 4 mod 143) (7 2 mod 143) 7 mod mod 143 = mod 143 = (7 1 mod 143) 2 mod 143 = 49 mod 143 = mod 143 = (7 2 mod 143) 2 mod 143 = 49 2 mod 143 = mod 143 = (7 4 mod 143) 2 mod 143 = mod 143 = mod 143 = (7 8 mod 143) 2 mod 143 = 42 2 mod 143 = mod 143 = (7 16 mod 143) 2 mod 143 = 48 2 mod 143 = mod 143 = (7 32 mod 143) 2 mod 143 = 16 2 mod 143 = 113 Do wyliczenia potęgi bierzemy tylko te reszty, które występują w sumie potęg 2: (jeśli byłoby ich bardzo dużo, to każde mnożenie można wykonać z operacją modulo, dzięki czemu wynik nigdy nie wyjdzie poza wartość modułu) t = mod 143 = mod 143 = 123 Na podstawie podanych informacji napiszemy prostą aplikację, która pełnić będzie rolę kompletnego systemu szyfrowania RSA. Proces szyfrowania i rozszyfrowywania jest identyczny, różni się tylko rodzajem zastosowanego klucza. Dlatego w aplikacji występują jedynie dwie opcje: tworzenie kluczy RSA oraz szyfrowanie RSA. W pierwszym przypadku program generuje dwa klucze, publiczny oraz prywatny. Należy zapamiętać te dane, gdyż będą one potrzebne w drugiej opcji do szyfrowania lub rozszyfrowywania. Proponujemy zastosowanie tej aplikacji do prostej zabawy w klasie. Tworzymy jedną grupę uczniów, która utworzy klucz publiczny oraz prywatny. Klucz publiczny przekaże reszcie klasy, klucz prywatny zachowa dla siebie. Następnie pozostali uczniowie na podstawie otrzymanych kluczy publicznych mogą kodować swoje dane i przekazywać je pierwszej grupie, która za pomocą klucza prywatnego dokona rozszyfrowania wiadomości. Życzymy dobrej zabawy. Wydruk z uruchomionego programu System szyfrowania danych RSA (C)2005 mgr Jerzy Wałaszek MENU ==== [ 0 ] - Koniec pracy programu [ 1 ] - Generowanie kluczy RSA [ 2 ] - Kodowanie RSA Generowanie kluczy RSA KLUCZ PUBLICZNY wykładnik e = 3 moduł n = 391 KLUCZ PRYWATNY wykładnik d = 235 Jaki jest twój wybór? (0, 1 lub 2) : Zapisz te dane i naciśnij Enter

5 Kodowanie danych RSA Podaj wykładnik = 3 Podaj moduł = Podaj kod RSA = 123 Wynik kodowania = 98 Kodowanie danych RSA Podaj wykładnik = 235 Podaj moduł = Podaj kod RSA = 98 Wynik kodowania = 123 Zapisz te dane i naciśnij Enter Zapisz te dane i naciśnij Enter Microsoft Visual Basic 2005 Express Edition

6 Borland Delphi 7.0 ******************************************************* Personal ** Przykładowa aplikacja obrazująca sposób działania ** Edition ** asymetrycznego systemu kodowania informacji RSA. ** ** ** ** (C)2003 mgr Jerzy Wałaszek ** ** I Liceum Ogólnokształcące ** ** im. Kazimierza Brodzińskiego ** ** w Tarnowie ** ******************************************************* program rsa; $APPTYPE CONSOLE // Procedura oczekuje na naciśnięcie klawisza Enter // po czym czyści ekran okna konsoli procedure Czekaj; i : integer; writeln('zapisz te dane i nacisnij Enter'); readln; for i := 1 to 500 do // Funkcja obliczająca NWD dla dwóch liczb function nwd(a,b : integer) : integer; t : integer; while b <> do t := b; b := a mod b; a := t nwd := a // Funkcja obliczania odwrotności modulo n function odwr_mod(a,n : integer) : integer; a0,n0,p0,p1,q,r,t : integer; p0 := ; p1 := 1; a0 := a; n0 := n; q := n0 div a0; r := n0 mod a0; while r > do t := p0 - q * p1; if t >= then t := t mod n else t := n - ((-t) mod n); p0 := p1; p1 := t; n0 := a0; a0 := r; q := n0 div a0; r := n0 mod a0; odwr_mod := p1; // Procedura generowania kluczy RSA // procedure klucze_rsa; const tp : array[..9] of integer = (11,13,17,19,23,29,31,37,41,43); p,q,phi,n,e,d : integer; writeln('generowanie kluczy RSA'); writeln(' '); // generujemy dwie różne, losowe liczby pierwsze repeat p := tp[random(10)]; q := tp[random(10)]; until p <> q; phi := (p - 1) * (q - 1); n := p * q; // wyznaczamy wykładniki e i d e := 3; while nwd(e,phi) <> 1 do inc(e,2); d := odwr_mod(e,phi); // gotowe, wypisujemy klucze writeln('klucz PUBLICZNY'); writeln('wykladnik e = ',e); writeln(' modul n = ',n); writeln('klucz PRYWATNY'); writeln('wykladnik d = ',d); Czekaj; // Funkcja oblicza modulo potęgę podanej liczby function pot_mod(a,w,n : integer) : integer; pot,wyn,q : integer; // wykładnik w rozbieramy na sumę potęg 2. Dla reszt // niezerowych tworzymy iloczyn potęg a modulo n. pot := a; wyn := 1; q := w; while q > do if (q mod 2) = 1 then wyn := (wyn * pot) mod n; pot := (pot * pot) mod n; // kolejna potęga q := q div 2; pot_mod := wyn; // Procedura kodowania danych RSA // procedure kodowanie_rsa; e,n,t : integer; writeln('kodowanie danych RSA'); writeln(' '); write('podaj wykladnik = '); readln(e); write(' Podaj modul = '); readln(n); writeln(' '); write('podaj kod RSA = '); readln(t); writeln('wynik kodowania = ',pot_mod(t,e,n)); Czekaj; // ******************** // ** Program główny ** // ******************** w : integer; randomize; repeat writeln('system szyfrowania danych RSA'); writeln(' '); writeln(' (C)2003 mgr Jerzy Walaszek '); writeln('menu'); writeln('===='); writeln('[ 0 ] - Koniec pracy programu'); writeln('[ 1 ] - Generowanie kluczy RSA'); writeln('[ 2 ] - Kodowanie RSA'); write('jaki jest twoj wybor? (0, 1 lub 2) : '); readln(w); case w of 1 : klucze_rsa; 2 : kodowanie_rsa; until w = ; end.

7 Borland /* C++ Builder ******************************************************* 6.0 ** Przykładowa aplikacja obrazująca sposób działania ** Personal ** asymetrycznego systemu kodowania informacji RSA. ** Edition ** ** ** (C)2003 mgr Jerzy Wałaszek ** ** I Liceum Ogólnokształcące ** ** im. Kazimierza Brodzińskiego ** ** w Tarnowie ** ******************************************************* */ #include <iostream> #include <iomanip> using namespace std; // Funkcja czeka na dowolny klawisz i czyści ekran void czekaj(void) char c[1]; cout << "nzapisz te danenn"; cin.getline(c,1); cin.getline(c,1); for(int i = 1; i < 500; i++) cout << endl; // Funkcja obliczająca NWD dla dwóch liczb int nwd(int a, int b) int t; while(b!= ) t = b; b = a % b; a = t; ; return a; // Funkcja obliczania odwrotności modulo n int odwr_mod(int a, int n) int a0,n0,p0,p1,q,r,t; p0 = ; p1 = 1; a0 = a; n0 = n; q = n0 / a0; r = n0 % a0; while(r > ) t = p0 - q * p1; if(t >= ) t = t % n; else t = n - ((-t) % n); p0 = p1; p1 = t; n0 = a0; a0 = r; q = n0 / a0; r = n0 % a0; return p1; // Procedura generowania kluczy RSA // void klucze_rsa() const int tp[10] = 11,13,17,19,23,29,31,37,41,43; int p,q,phi,n,e,d; cout << "Generowanie kluczy RSA\n" " \n\n"; // generujemy dwie różne, losowe liczby pierwsze do p = tp[rand() % 10]; q = tp[rand() % 10]; while (p == q); phi = (p - 1) * (q - 1); n = p * q; // wyznaczamy wykładniki e i d for(e = 3; nwd(e,phi)!= 1; e += 2); d = odwr_mod(e,phi); // gotowe, wypisujemy klucze cout << "KLUCZ PUBLICZNY\n" "wykladnik e = " << e << "\n modul n = " << n << "\n\nklucz PRYWATNY\n" "wykladnik d = " << d << endl; czekaj(); // Funkcja oblicza modulo potęgę podanej liczby int pot_mod(int a, int w, int n) int pot,wyn,q; // wykładnik w rozbieramy na sumę potęg 2 // przy pomocy algorytmu Hornera. Dla reszt // niezerowych tworzymy iloczyn potęg a modulo n. pot = a; wyn = 1; for(q = w; q > ; q /= 2) if(q % 2) wyn = (wyn * pot) % n; pot = (pot * pot) % n; // kolejna potęga return wyn; // Procedura kodowania danych RSA // void kodowanie_rsa() int e,n,t; cout << "Kodowanie danych RSA\n" " \n\n" "Podaj wykladnik = "; cin >> e; cout << " Podaj modul = "; cin >> n; cout << " \n\n" "Podaj kod RSA = "; cin >> t; cout << "\nwynik kodowania = " << pot_mod(t,e,n) << endl; czekaj(); // ******************** // ** Program główny ** // ******************** main() int w; srand((unsigned)time(null)); do cout << "System szyfrowania danych RSA\n" " \n" " (C)2003 mgr Jerzy Walaszek\n\n" "MENU\n" "====\n" "[ 0 ] - Koniec pracy programu\n" "[ 1 ] - Generowanie kluczy RSA\n" "[ 2 ] - Kodowanie RSA\n\n" "Jaki jest twoj wybor? (0, 1 lub 2) : "; cin >> w; cout << "\n\n\n"; switch (w) case 1 : klucze_rsa(); break; case 2 : kodowanie_rsa(); break; cout << "\n\n\n"; while(w!= );

8 Microsoft ' ******************************************************* Visual ' ** Przykładowa aplikacja obrazująca sposób działania ** Basic 2005 ' ** asymetrycznego systemu kodowania informacji RSA. ** Express ' ** ** Edition ' ** (C)2005 mgr Jerzy Wałaszek ** ' ** I Liceum Ogólnokształcące ** ' ** im. Kazimierza Brodzińskiego ** ' ** w Tarnowie ** ' ******************************************************* Option Explicit On Module Module1 ' Procedura oczekuje na naciśnięcie klawisza Enter ' po czym czyści ekran okna konsoli ' Public Sub Czekaj() Console.WriteLine("Zapisz te dane i naciśnij Enter") Console.ReadLine() End Sub ' Funkcja obliczająca NWD dla dwóch liczb ' Public Function nwd(byval a As Integer, ByVal b As Integer) As Integer Dim t As Integer While b <> t = b b = a Mod b a = t End While Return a End Function ' Funkcja obliczania odwrotności modulo n ' Public Function odwr_mod(byval a As Integer, ByVal n As Integer) As Integer Dim a0, n0, p0, p1, q, r, t As Integer p0 = : p1 = 1 : a0 = a : n0 = n q = n0 \ a0 r = n0 Mod a0 While r > t = p0 - q * p1 If t >= Then t = t Mod n Else t = n - ((-t) Mod n) End If p0 = p1 : p1 = t n0 = a0 : a0 = r q = n0 \ a0 r = n0 Mod a0 End While Return p1 End Function ' Procedura generowania kluczy RSA ' Public Sub klucze_rsa() Dim tp() As Integer = 11, 13, 17, 19, 23, 29, 31, 37, 41, 43 Dim p, q, phi, n, e, d As Integer Console.Clear() Console.WriteLine("Generowanie kluczy RSA") Console.WriteLine(" ") ' generujemy dwie różne, losowe liczby pierwsze Do p = tp(int(rnd() * 10)) q = tp(int(rnd() * 10)) Loop Until p <> q phi = (p - 1) * (q - 1) n = p * q ' wyznaczamy wykładniki e i d e = 3 While nwd(e, phi) <> 1 : e = e + 2 : End While d = odwr_mod(e, phi) ' gotowe, wypisujemy klucze Console.WriteLine("KLUCZ PUBLICZNY") Console.WriteLine("wykładnik e = 0,4", e) Console.WriteLine(" moduł n = 0,4", n) Console.WriteLine("KLUCZ PRYWATNY") Console.WriteLine("wykładnik d = 0,4", d) Czekaj() End Sub ' Funkcja oblicza modulo potęgę podanej liczby ' Public Function pot_mod(byval a As Integer, ByVal w As Integer, _ ByVal n As Integer) As Integer Dim pot, wyn, q As Integer ' wykładnik w rozbieramy na sumę potęg 2. Dla reszt ' niezerowych tworzymy iloczyn potęg a modulo n. pot = a : wyn = 1 : q = w While q > If (q Mod 2) = 1 Then wyn = (wyn * pot) Mod n pot = (pot * pot) Mod n ' kolejna potęga q = q \ 2 End While Return wyn End Function ' Procedura kodowania danych RSA ' Public Sub kodowanie_rsa() Dim e, n, t As Integer Console.Clear() Console.WriteLine("Kodowanie danych RSA") Console.WriteLine(" ") Console.Write("Podaj wykładnik = ") : e = Val(Console.ReadLine) Console.Write(" Podaj moduł = ") : n = Val(Console.ReadLine) Console.WriteLine(" ") Console.Write("Podaj kod RSA = ") : t = Val(Console.ReadLine) Console.WriteLine("Wynik kodowania = 0", pot_mod(t, e, n)) Czekaj() End Sub Sub main() Dim w As Integer Randomize() Do Console.Clear() Console.WriteLine("System szyfrowania danych RSA") Console.WriteLine(" ") Console.WriteLine(" (C)2005 mgr Jerzy Wałaszek ") Console.WriteLine("MENU") Console.WriteLine("====") Console.WriteLine("[ 0 ] - Koniec pracy programu") Console.WriteLine("[ 1 ] - Generowanie kluczy RSA") Console.WriteLine("[ 2 ] - Kodowanie RSA") Console.Write("Jaki jest twój wybór? (0, 1 lub 2) : ") w = Val(Console.ReadLine) Select Case w Case 1 : klucze_rsa() Case 2 : kodowanie_rsa() End Select Loop Until w = End Sub End Module

9 Python Program należy uruchamiać z dysku przez podwójne kliknięcie myszką pliku ze skryptem. # -*- coding: cp1250 -*- # ******************************************************* # ** Przykładowa aplikacja obrazująca sposób działania ** # ** asymetrycznego systemu kodowania informacji RSA. ** # ** ** # ** (C)2005 mgr Jerzy Wałaszek ** # ** I Liceum Ogólnokształcące ** # ** im. Kazimierza Brodzińskiego ** # ** w Tarnowie ** # ******************************************************* import random import os # Procedura wywołuje polecenie systemowe, które czyści # zawartość okienka konsoli znakowej. W systemie Windows # jest to cls. W systemie Unix clear # def cls(): os.system("cls") # Procedura oczekuje na naciśnięcie klawisza Enter # po czym czyści ekran okna konsoli # def Czekaj(): raw_input("zapisz te dane i nacisnij Enter") # Funkcja obliczająca NWD dla dwóch liczb # def nwd(a, b): while b: a, b = b, a % b return a # Funkcja obliczania odwrotności modulo n # def odwr_mod(a, n): p0, p1, a0, n0 =, 1, a, n q, r = n0 // a0, n0 % a0 while r: t = p0 - q * p1 if t >= : t = t % n else: t = n - ((-t) % n) p0, p1, n0, a0 = p1, t, a0, r q, r = n0 // a0, n0 % a0 return p1 # Procedura generowania kluczy RSA # def klucze_rsa(): tp = [11, 13, 17, 19, 23, 29, 31, 37, 41, 43] cls() "Generowanie kluczy RSA" " " # generujemy dwie różne, losowe liczby pierwsze p = q = while p == q: p, q = tp[random.randint(, 9)], tp[random.randint(, 9)] phi, n = (p - 1) * (q - 1), p * q # wyznaczamy wykładniki e i d e = 3 while nwd(e, phi)!= 1: e += 2 d = odwr_mod(e, phi) # gotowe, wypisujemy klucze "KLUCZ PUBLICZNY" "wykladnik e = %4d" % e " modul n = %4d" % n "KLUCZ PRYWATNY" "wykladnik d = %4d" % d Czekaj() # Funkcja oblicza modulo potęgę podanej liczby # def pot_mod(a, w, n): # wykładnik w rozbieramy na sumę potęg 2. Dla reszt # niezerowych tworzymy iloczyn potęg a modulo n. pot, wyn, q = a, 1, w while q: if (q % 2) == 1: wyn = (wyn * pot) % n pot = (pot * pot) % n # kolejna potęga q //= 2 return wyn # Procedura kodowania danych RSA # def kodowanie_rsa(): cls() "Kodowanie danych RSA" " " e = int(raw_input("podaj wykladnik = ")) n = int(raw_input(" Podaj modul = ")) " " t = int(raw_input("podaj kod RSA = ")) "Wynik kodowania =", pot_mod(t, e, n) Czekaj() # ******************** # ** Program główny ** # ******************** w = 1 while w: cls() "System szyfrowania danych RSA" " " " (C)2005 mgr Jerzy Walaszek " "MENU" "====" "[ 0 ] - Koniec pracy programu" "[ 1 ] - Generowanie kluczy RSA" "[ 2 ] - Kodowanie RSA" w = int(raw_input("jaki jest twoj wybor? (0, 1 lub 2) : ")) if w == 1: klucze_rsa() elif w == 2: kodowanie_rsa()

10 JavaScript <html> <head> <title>algorytm RSA</title> </head> <body> <form style="border:2px outset #FFCC00; PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; PADDING-TOP: 1px; BACKGROUND-COLOR: #FFCC00" name="rsa"> <div align="center"><center> <h2>generator kluczy RSA</h2> <p>(c)2004 mgr Jerzy Wałaszek I LO w Tarnowie</p> <p> <input onclick="js_genkeys()" type="button" value="generuj klucze"> <input onclick="js_keyclr()" type="button" value="czyść klucze"> </p> <table cellspacing="4" cellpadding="4" bgcolor="#ff9933" border="0" style="border-collapse: collapse"> <th colspan="2">klucz publiczny</th> <th colspan="2">klucz prywatny</th> <td>wykładnik</td> <td id="gkey_e" style="text-align: center">...</td> <td>wykładnik</td> <td id="gkey_d" style="text-align: center">...</td> <td>moduł</td> <td id="gkey_n1" style="text-align: center">...</td> <td>moduł</td> <td id="gkey_n2" style="text-align: center">...</td> </table> <hr> <h2>koder szyfru RSA</h2> <p>(c)2004 mgr Jerzy Wałaszek I LO w Tarnowie</p> <table cellspacing="4" cellpadding="4" bgcolor="#ff9933" border="0" style="border-collapse: collapse"> <td>wykładnik</td> <td><input name="ed"></td> <td>moduł</td> <td><input name="n"></td> <td>wiadomość</td> <td><input name="m"></td> </table> <p> <input onclick="js_codersa()" type="button" value="koduj RSA"> <input onclick="js_codeclr()" type="button" value="czyść formularz"> </p> <p id="rsa_out">...</p> </center></div> </form> <script language="javascript"> // Funkcja obliczająca NWD dla dwóch liczb function nwd(a, b) t; while(b!= ) t = b; b = a % b; a = t; return a; // Funkcja obliczania odwrotności modulo n function odwr_mod(a, n) a0,n0,p0,p1,q,r,t; p0 = ; p1 = 1; a0 = a; n0 = n; q = Math.floor(n0 / a0); r = n0 % a0; while(r > ) t = p0 - q * p1; if(t >= ) t = t % n; else t = n - ((-t) % n); p0 = p1; p1 = t; n0 = a0; a0 = r; q = Math.floor(n0 / a0); r = n0 % a0; return p1; function js_genkeys() tp = new Array(11,13,17,19,23,29,31,37,41,43); p,q,phi,n,e,d; // generujemy dwie różne, losowe liczby pierwsze do p = tp[math.floor(math.random() * 10)]; q = tp[math.floor(math.random() * 10)]; while (p == q); phi = (p - 1) * (q - 1); n = p * q; // wyznaczamy wykładniki e i d for(e = 3; nwd(e,phi)!= 1; e += 2); d = odwr_mod(e,phi); // gotowe, wypisujemy klucze document.getelementbyid("gkey_e").innerhtml = e; document.getelementbyid("gkey_d").innerhtml = d; document.getelementbyid("gkey_n1").innerhtml = n; document.getelementbyid("gkey_n2").innerhtml = n; function js_keyclr() document.getelementbyid("gkey_e").innerhtml = " "; document.getelementbyid("gkey_d").innerhtml = " "; document.getelementbyid("gkey_n1").innerhtml = " "; document.getelementbyid("gkey_n2").innerhtml = " "; // Funkcja oblicza modulo potęgę podanej liczby function pot_mod(a, w, n) pot,wyn,q; // wykładnik w rozbieramy na sumę potęg 2. Dla reszt // niezerowych tworzymy iloczyn potęg a modulo n. pot = a; wyn = 1; for(q = w; q > ; q = Math.floor(q / 2)) if(q % 2) wyn = (wyn * pot) % n; pot = (pot * pot) % n; // kolejna potęga return wyn; function js_codersa() e,n,t,s; e = parseint(document.rsa.ed.value); n = parseint(document.rsa.n.value); t = parseint(document.rsa.m.value); if(isnan(e) isnan(n) isnan(t)) s = "Błąd danych"; else s = pot_mod(t,e,n); document.getelementbyid("rsa_out").innerhtml = s; function js_codeclr() document.rsa.ed.value = ""; document.rsa.n.value = ""; document.rsa.m.value = ""; document.getelementbyid("rsa_out").innerhtml = " "; </script> </body> </html>

11 Poniższe, przykładowe programy są praktyczną realizacją omawianego w tym rozdziale algorytmu. Zapewne można je napisać bardziej efektywnie. To już twoje zadanie. Dokładny opis stosowanych środowisk programowania znajdziesz we wstępie. Programy przed opublikowaniem w serwisie edukacyjnym zostały dokładnie przetestowane. Jeśli jednak znajdziesz jakąś usterkę (co zawsze może się zdarzyć), to prześlij o niej informację do autora. Pozwoli to ulepszyć nasze artykuły. Będziemy Ci za to wdzięczni. Dokument ten rozpowszechniany jest zgodnie z zasadami licencji GNU Free Documentation License. Autor: mgr Jerzy Wałaszek Przedruk ze strony: Artykuł pobrano ze strony eioba.pl

RSA. R.L.Rivest A. Shamir L. Adleman. Twórcy algorytmu RSA

RSA. R.L.Rivest A. Shamir L. Adleman. Twórcy algorytmu RSA RSA Symetryczny system szyfrowania to taki, w którym klucz szyfrujący pozwala zarówno szyfrować dane, jak również odszyfrowywać je. Opisane w poprzednich rozdziałach systemy były systemami symetrycznymi.

Bardziej szczegółowo

Liczby pierwsze - generacja liczb pierwszych

Liczby pierwsze - generacja liczb pierwszych Artykuł pobrano ze strony eioba.pl Liczby pierwsze - generacja liczb pierwszych Do generacji liczb pierwszych wykorzystamy podaną w poprzednim rozdziale definicję liczby pierwszej. Algorytm będzie składał

Bardziej szczegółowo

Całkowanie numeryczne - metoda prostokątów

Całkowanie numeryczne - metoda prostokątów Artykuł pobrano ze strony eioba.pl Całkowanie numeryczne - metoda prostokątów W metodzie prostokątów korzystamy z definicji całki oznaczonej Riemanna, w której wartość całki interpretowana jest jako suma

Bardziej szczegółowo

Przeliczanie na zapis stałoprzecinkowy

Przeliczanie na zapis stałoprzecinkowy Artykuł pobrano ze strony eioba.pl Przeliczanie na zapis stałoprzecinkowy Nasz problem polega na znalezieniu reprezentacji danej liczby dziesiętnej w docelowym systemie pozycyjnym o podstawie p. Część

Bardziej szczegółowo

Miejsca zerowe funkcji - Metoda połowienia

Miejsca zerowe funkcji - Metoda połowienia Artykuł pobrano ze strony eioba.pl Miejsca zerowe funkcji - Metoda połowienia Mamy daną funkcję f(x) oraz przedział , w którym będziemy poszukiwali miejsca zerowego (czyli pierwiastka funkcji f(x)).

Bardziej szczegółowo

Całkowanie numeryczne - metoda Simpsona

Całkowanie numeryczne - metoda Simpsona Artykuł pobrano ze strony eioba.pl Całkowanie numeryczne - metoda Simpsona TRUDNE! Metoda Simpsona jest najdokładniejszą z dotąd poznanych przez nas metod przybliżonego całkowania. W metodzie prostokątów

Bardziej szczegółowo

Miejsca zerowe funkcji - Metoda Newtona

Miejsca zerowe funkcji - Metoda Newtona Artykuł pobrano ze strony eioba.pl Miejsca zerowe funkcji - Metoda Newtona Mamy daną funkcję f(x), jeden punkty startowy x o i przedział poszukiwań pierwiastka, do którego należy punkt x o. W przedziale

Bardziej szczegółowo

Liczby pierwsze - sito Eratostenesa

Liczby pierwsze - sito Eratostenesa Artykuł pobrano ze strony eioba.pl Liczby pierwsze - sito Eratostenesa Już w czasach starożytnych znano metodę opisaną przez greckiego uczonego Eratostenesa z Cyreny. Podszedł on do rozwiązania od drugiej

Bardziej szczegółowo

Ilość cyfr liczby naturalnej

Ilość cyfr liczby naturalnej Ilość cyfr liczby naturalnej Użytkownik wprowadza liczbę naturalną n. Podaj algorytm znajdowania ilości cyfr liczby n. (Np.: po wprowadzeniu liczby 2453, jako wynik powinna zostać podana liczba 4). Specyfikacja

Bardziej szczegółowo

binit - binary digit, bigit - binary digit

binit - binary digit, bigit - binary digit Artykuł pobrano ze strony eioba.pl Kody binarne Historia rozwoju komputerów pokazuje nam, iż system binarny nie został od razu wybrany jako podstawowy system reprezentacji liczb w maszynach cyfrowych.

Bardziej szczegółowo

Sortowanie stogowe Heap Sort

Sortowanie stogowe Heap Sort Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych. Autor artykułu: mgr Jerzy Wałaszek, Wersja 4.1 Sortowanie stogowe Heap Sort Podrozdziały Tematy pokrewne Algorytm rozbioru kopca

Bardziej szczegółowo

Podstawy systemów kryptograficznych z kluczem jawnym RSA

Podstawy systemów kryptograficznych z kluczem jawnym RSA Podstawy systemów kryptograficznych z kluczem jawnym RSA RSA nazwa pochodząca od nazwisk twórców systemu (Rivest, Shamir, Adleman) Systemów z kluczem jawnym można używać do szyfrowania operacji przesyłanych

Bardziej szczegółowo

Zastosowanie teorii liczb w kryptografii na przykładzie szyfru RSA

Zastosowanie teorii liczb w kryptografii na przykładzie szyfru RSA Zastosowanie teorii liczb w kryptografii na przykładzie szyfru RSA Grzegorz Bobiński Uniwersytet Mikołaja Kopernika Toruń, 22.05.2010 Kodowanie a szyfrowanie kodowanie sposoby przesyłania danych tak, aby

Bardziej szczegółowo

Szyfrowanie RSA (Podróż do krainy kryptografii)

Szyfrowanie RSA (Podróż do krainy kryptografii) Szyfrowanie RSA (Podróż do krainy kryptografii) Nie bójmy się programować z wykorzystaniem filmów Academy Khana i innych dostępnych źródeł oprac. Piotr Maciej Jóźwik Wprowadzenie metodyczne Realizacja

Bardziej szczegółowo

n = p q, (2.2) przy czym p i q losowe duże liczby pierwsze.

n = p q, (2.2) przy czym p i q losowe duże liczby pierwsze. Wykład 2 Temat: Algorytm kryptograficzny RSA: schemat i opis algorytmu, procedura szyfrowania i odszyfrowania, aspekty bezpieczeństwa, stosowanie RSA jest algorytmem z kluczem publicznym i został opracowany

Bardziej szczegółowo

LICZBY PIERWSZE. Jan Ciurej Radosław Żak

LICZBY PIERWSZE. Jan Ciurej Radosław Żak LICZBY PIERWSZE Jan Ciurej Radosław Żak klasa IV a Katolicka Szkoła Podstawowa im. Świętej Rodziny z Nazaretu w Krakowie ul. Pędzichów 13, 31-152 Kraków opiekun - mgr Urszula Zacharska konsultacja informatyczna

Bardziej szczegółowo

INFORMATYKA WYBRANE ALGORYTMY OPTYMALIZACYJNE KRYPTOLOGIA.

INFORMATYKA WYBRANE ALGORYTMY OPTYMALIZACYJNE KRYPTOLOGIA. INFORMATYKA WYBRANE ALGORYTMY OPTYMALIZACYJNE KRYPTOLOGIA http://www.infoceram.agh.edu.pl Klasy metod algorytmicznych Metoda TOP-DOWN (zstępująca, analityczna) Metoda BOTTOM-UP (wstępująca, syntetyczna)

Bardziej szczegółowo

Zarys algorytmów kryptograficznych

Zarys algorytmów kryptograficznych Zarys algorytmów kryptograficznych Laboratorium: Algorytmy i struktury danych Spis treści 1 Wstęp 1 2 Szyfry 2 2.1 Algorytmy i szyfry........................ 2 2.2 Prosty algorytm XOR......................

Bardziej szczegółowo

Kryptologia przykład metody RSA

Kryptologia przykład metody RSA Kryptologia przykład metody RSA przygotowanie: - niech p=11, q=23 n= p*q = 253 - funkcja Eulera phi(n)=(p-1)*(q-1)=220 - teraz potrzebne jest e które nie jest podzielnikiem phi; na przykład liczba pierwsza

Bardziej szczegółowo

Kryptografia. z elementami kryptografii kwantowej. Ryszard Tanaś Wykład 5

Kryptografia. z elementami kryptografii kwantowej. Ryszard Tanaś   Wykład 5 Kryptografia z elementami kryptografii kwantowej Ryszard Tanaś http://zon8.physd.amu.edu.pl/~tanas Wykład 5 Spis treści 9 Algorytmy asymetryczne RSA 3 9.1 Algorytm RSA................... 4 9.2 Szyfrowanie.....................

Bardziej szczegółowo

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka 1. Kompilacja aplikacji konsolowych w środowisku programistycznym Microsoft Visual Basic. Odszukaj w menu startowym systemu

Bardziej szczegółowo

PuTTY. Systemy Operacyjne zaawansowane uŝytkowanie pakietu PuTTY, WinSCP. Inne interesujące programy pakietu PuTTY. Kryptografia symetryczna

PuTTY. Systemy Operacyjne zaawansowane uŝytkowanie pakietu PuTTY, WinSCP. Inne interesujące programy pakietu PuTTY. Kryptografia symetryczna PuTTY Systemy Operacyjne zaawansowane uŝytkowanie pakietu PuTTY, WinSCP Marcin Pilarski PuTTY emuluje terminal tekstowy łączący się z serwerem za pomocą protokołu Telnet, Rlogin oraz SSH1 i SSH2. Implementuje

Bardziej szczegółowo

0 --> 5, 1 --> 7, 2 --> 9, 3 -->1, 4 --> 3, 5 --> 5, 6 --> 7, 7 --> 9, 8 --> 1, 9 --> 3.

0 --> 5, 1 --> 7, 2 --> 9, 3 -->1, 4 --> 3, 5 --> 5, 6 --> 7, 7 --> 9, 8 --> 1, 9 --> 3. (Aktualizacja z dnia 3 kwietnia 2013) MATEMATYKA DYSKRETNA - informatyka semestr 2 (lato 2012/2013) Zadania do omówienia na zajęciach w dniach 21 i 28 kwietnia 2013 ZESTAW NR 3/7 (przykłady zadań z rozwiązaniami)

Bardziej szczegółowo

Wyszukiwanie największej spośród czterech liczb. Przykładowe rozwiązanie

Wyszukiwanie największej spośród czterech liczb. Przykładowe rozwiązanie Wyszukiwanie największej spośród czterech liczb Użytkownik podaje cztery liczby rzeczywiste. Podaj algorytm znajdowania największej spośród nich. (Np.: po wprowadzeniu liczb: 12 7 18.5 9 program powinien

Bardziej szczegółowo

Palindromy. Przykładowe rozwiązanie

Palindromy. Przykładowe rozwiązanie Palindromy Palindromem (z greckiego) nazywamy wyraz, który tak samo brzmi, gdy jest czytany wspak. Palindromami są na przykład takie wyrazy, jak kajak, zaraz, oko, zakaz, mam itp. Użytkownik wprowadza

Bardziej szczegółowo

Wykład VI. Programowanie III - semestr III Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykład VI. Programowanie III - semestr III Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład VI - semestr III Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2013 c Copyright 2013 Janusz Słupik Podstawowe zasady bezpieczeństwa danych Bezpieczeństwo Obszary:

Bardziej szczegółowo

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char Programowanie C++ Informacje wstępne #include - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char = -128 do 127, unsigned char = od

Bardziej szczegółowo

Kryptografia-0. przykład ze starożytności: około 489 r. p.n.e. niewidzialny atrament (pisze o nim Pliniusz Starszy I wiek n.e.)

Kryptografia-0. przykład ze starożytności: około 489 r. p.n.e. niewidzialny atrament (pisze o nim Pliniusz Starszy I wiek n.e.) Kryptografia-0 -zachowanie informacji dla osób wtajemniczonych -mimo że włamujący się ma dostęp do informacji zaszyfrowanej -mimo że włamujący się zna (?) stosowaną metodę szyfrowania -mimo że włamujący

Bardziej szczegółowo

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 15, Kryptografia: algorytmy asymetryczne (RSA)

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 15, Kryptografia: algorytmy asymetryczne (RSA) Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 15, 19.06.2005 1 Kryptografia: algorytmy asymetryczne (RSA) Niech E K (x) oznacza szyfrowanie wiadomości x kluczem K (E od encrypt, D K (x)

Bardziej szczegółowo

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 14, Kryptografia: algorytmy asymetryczne (RSA)

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 14, Kryptografia: algorytmy asymetryczne (RSA) Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 14, 7.06.2005 1 Kryptografia: algorytmy asymetryczne (RSA) Niech E K (x) oznacza szyfrowanie wiadomości x kluczem K (E od encrypt, D K (x)

Bardziej szczegółowo

Wybrane zagadnienia teorii liczb

Wybrane zagadnienia teorii liczb Wybrane zagadnienia teorii liczb Podzielność liczb NWW, NWD, Algorytm Euklidesa Arytmetyka modularna Potęgowanie modularne Małe twierdzenie Fermata Liczby pierwsze Kryptosystem RSA Podzielność liczb Relacja

Bardziej szczegółowo

Algorytmy asymetryczne

Algorytmy asymetryczne Algorytmy asymetryczne Klucze występują w parach jeden do szyfrowania, drugi do deszyfrowania (niekiedy klucze mogą pracować zamiennie ) Opublikowanie jednego z kluczy nie zdradza drugiego, nawet gdy można

Bardziej szczegółowo

Funkcje i instrukcje języka JavaScript

Funkcje i instrukcje języka JavaScript Funkcje i instrukcje języka JavaScript 1. Cele lekcji a) Wiadomości Uczeń : zna operatory i typy danych języka JavaScript, zna konstrukcję definicji funkcji, zna pętlę If i For, Do i While oraz podaje

Bardziej szczegółowo

LICZBY PIERWSZE. 14 marzec 2007. Jeśli matematyka jest królową nauk, to królową matematyki jest teoria liczb. C.F.

LICZBY PIERWSZE. 14 marzec 2007. Jeśli matematyka jest królową nauk, to królową matematyki jest teoria liczb. C.F. Jeśli matematyka jest królową nauk, to królową matematyki jest teoria liczb. C.F. Gauss (1777-1855) 14 marzec 2007 Zasadnicze twierdzenie teorii liczb Zasadnicze twierdzenie teorii liczb Ile jest liczb

Bardziej szczegółowo

Instrukcje sterujące mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2012

Instrukcje sterujące mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2012 Instrukcje sterujące mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2012 if (warunek) instrukcja1; if (warunek) instrukcja1; else instrukcja2; if (warunek) instrukcja1; else if (warunek2)

Bardziej szczegółowo

Ataki na RSA. Andrzej Chmielowiec. Centrum Modelowania Matematycznego Sigma. Ataki na RSA p. 1

Ataki na RSA. Andrzej Chmielowiec. Centrum Modelowania Matematycznego Sigma. Ataki na RSA p. 1 Ataki na RSA Andrzej Chmielowiec andrzej.chmielowiec@cmmsigma.eu Centrum Modelowania Matematycznego Sigma Ataki na RSA p. 1 Plan prezentacji Wprowadzenie Ataki algebraiczne Ataki z kanałem pobocznym Podsumowanie

Bardziej szczegółowo

Załóżmy, że musimy zapakować plecak na wycieczkę. Plecak ma pojemność S. Przedmioty mają objętości,,...,, których suma jest większa od S.

Załóżmy, że musimy zapakować plecak na wycieczkę. Plecak ma pojemność S. Przedmioty mają objętości,,...,, których suma jest większa od S. Załóżmy, że musimy zapakować plecak na wycieczkę. Plecak ma pojemność S. Przedmioty mają objętości,,...,, których suma jest większa od S. Plecak ma być zapakowany optymalnie, tzn. bierzemy tylko te przedmioty,

Bardziej szczegółowo

Język programowania PASCAL

Język programowania PASCAL Język programowania PASCAL (wersja podstawowa - standard) Literatura: dowolny podręcznik do języka PASCAL (na laboratoriach Borland) Iglewski, Madey, Matwin PASCAL STANDARD, PASCAL 360 Marciniak TURBO

Bardziej szczegółowo

Systemy Operacyjne zaawansowane uŝytkowanie pakietu PuTTY, WinSCP. Marcin Pilarski

Systemy Operacyjne zaawansowane uŝytkowanie pakietu PuTTY, WinSCP. Marcin Pilarski Systemy Operacyjne zaawansowane uŝytkowanie pakietu PuTTY, WinSCP Marcin Pilarski PuTTY PuTTY emuluje terminal tekstowy łączący się z serwerem za pomocą protokołu Telnet, Rlogin oraz SSH1 i SSH2. Implementuje

Bardziej szczegółowo

Wykład VII. Kryptografia Kierunek Informatyka - semestr V. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykład VII. Kryptografia Kierunek Informatyka - semestr V. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład VII Kierunek Informatyka - semestr V Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Problem pakowania plecaka System kryptograficzny Merklego-Hellmana

Bardziej szczegółowo

Informatyka dla klas I wykresy funkcji

Informatyka dla klas I wykresy funkcji 2013 mgr Jerzy Wałaszek I LO w Tarnowie Informatyka dla klas I wykresy funkcji Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych. Autor artykułu: mgr Jerzy Wałaszek, wersja1.0

Bardziej szczegółowo

WYKŁAD 3 (13 MARZEC 2014) LICZBY CAŁKOWITE I RZECZYWISTE. Bartosz Łakomy i Dariusz Dobiesz

WYKŁAD 3 (13 MARZEC 2014) LICZBY CAŁKOWITE I RZECZYWISTE. Bartosz Łakomy i Dariusz Dobiesz WYKŁAD 3 (13 MARZEC 2014) LICZBY CAŁKOWITE I RZECZYWISTE Bartosz Łakomy i Dariusz Dobiesz SPIS TREŚCI: Liczby parzyste i nieparzyste Liczby podzielne lub niepodzielne przez zadane podzielniki NWD algorytm

Bardziej szczegółowo

I - Microsoft Visual Studio C++

I - Microsoft Visual Studio C++ I - Microsoft Visual Studio C++ 1. Nowy projekt z Menu wybieramy File -> New -> Projekt -> Win32 Console Application w okienku Name: podajemy nazwę projektu w polu Location: wybieramy miejsce zapisu i

Bardziej szczegółowo

5. Rekurencja. Przykłady

5. Rekurencja. Przykłady 5. Rekurencja Uwaga! W tym rozdziale nie są omówione żadne nowe konstrukcje języka C++. Omówiona jest za to technika wykorzystująca funkcje, która pozwala na rozwiązanie pewnych nowych rodzajów zadań.

Bardziej szczegółowo

Liczby całkowite i rzeczywiste

Liczby całkowite i rzeczywiste Wykład 4(20 marzec 2014r.) Liczby całkowite i rzeczywiste Paulina Rogowiecka Klaudia Kamińska Adrianna Znyk 1 Spis treści: Czynniki pierwsze metoda próbnych dzieleń Pierwszość liczby naturalnej algorytmy

Bardziej szczegółowo

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl System dziesiętny 7 * 10 4 + 3 * 10 3 + 0 * 10 2 + 5 *10 1 + 1 * 10 0 = 73051 Liczba 10 w tym zapisie nazywa się podstawą systemu liczenia. Jeśli liczba 73051 byłaby zapisana w systemie ósemkowym, co powinniśmy

Bardziej szczegółowo

Dr inż. Robert Wójcik, p. 313, C-3, tel Katedra Informatyki Technicznej (K-9) Wydział Elektroniki (W-4) Politechnika Wrocławska

Dr inż. Robert Wójcik, p. 313, C-3, tel Katedra Informatyki Technicznej (K-9) Wydział Elektroniki (W-4) Politechnika Wrocławska Dr inż. Robert Wójcik, p. 313, C-3, tel. 320-27-40 Katedra Informatyki Technicznej (K-9) Wydział Elektroniki (W-4) Politechnika Wrocławska E-mail: Strona internetowa: robert.wojcik@pwr.edu.pl google: Wójcik

Bardziej szczegółowo

Kryptografia publiczna (asymetryczna) Szyfrowanie publiczne (asym) Problem klucza publicznego. Podpisujemy cyfrowo. Jak zweryfikować klucz publiczny?

Kryptografia publiczna (asymetryczna) Szyfrowanie publiczne (asym) Problem klucza publicznego. Podpisujemy cyfrowo. Jak zweryfikować klucz publiczny? Kryptografia publiczna (asymetryczna) Wykład 7 Systemy kryptograficzne z kluczem publicznym Wiedza o kluczu szyfrującym nie pozwala odgadnąć klucza deszyfrującego Odbiorca informacji generuje parę kluczy

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 3 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2017/2018 Instrukcja wielokrotnego wyboru Instrukcja wielokrotnego wyboru switch umożliwia podejmowanie decyzji na podstawie wartości

Bardziej szczegółowo

Zadanie 1: Protokół ślepych podpisów cyfrowych w oparciu o algorytm RSA

Zadanie 1: Protokół ślepych podpisów cyfrowych w oparciu o algorytm RSA Informatyka, studia dzienne, inż. I st. semestr VI Podstawy Kryptografii - laboratorium 2010/2011 Prowadzący: prof. dr hab. Włodzimierz Jemec poniedziałek, 08:30 Data oddania: Ocena: Marcin Piekarski 150972

Bardziej szczegółowo

2.8. Algorytmy, schematy, programy

2.8. Algorytmy, schematy, programy https://app.wsipnet.pl/podreczniki/strona/38766 2.8. Algorytmy, schematy, programy DOWIESZ SIĘ co oznaczają pojęcia: algorytm, schemat blokowy, język programowania, jakie są sposoby obliczania największego

Bardziej szczegółowo

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie Algorytmika i programowanie Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie Tablice Tablica jest zbiorem elementów tego samego typu. Każdy element jest identyfikowany (numer

Bardziej szczegółowo

Operacje arytmetyczne w systemie dwójkowym

Operacje arytmetyczne w systemie dwójkowym Artykuł pobrano ze strony eioba.pl Operacje arytmetyczne w systemie dwójkowym Zasady arytmetyki w systemie binarnym są identyczne (prawie) jak w dobrze nam znanym systemie dziesiętnym. Zaletą arytmetyki

Bardziej szczegółowo

Programowanie komputerowe. Zajęcia 1

Programowanie komputerowe. Zajęcia 1 Programowanie komputerowe Zajęcia 1 Code::Blocks - tworzenie projektu Create New Project Console Application -> C++ Wybierz nazwę projektu Stworzy się nowy projekt z wpisaną funkcją main Wpisz swój program

Bardziej szczegółowo

Przewodnik użytkownika

Przewodnik użytkownika STOWARZYSZENIE PEMI Przewodnik użytkownika wstęp do podpisu elektronicznego kryptografia asymetryczna Stowarzyszenie PEMI Podpis elektroniczny Mobile Internet 2005 1. Dlaczego podpis elektroniczny? Podpis

Bardziej szczegółowo

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń. Podstawy programowania Programowanie wyrażeń 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń. W językach programowania są wykorzystywane

Bardziej szczegółowo

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++ Programowanie Wstęp p do programowania Klasa 3 Lekcja 9 PASCAL & C++ Język programowania Do przedstawiania algorytmów w postaci programów służą języki programowania. Tylko algorytm zapisany w postaci programu

Bardziej szczegółowo

Część 4 życie programu

Część 4 życie programu 1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Programowanie - wykład 4

Programowanie - wykład 4 Programowanie - wykład 4 Filip Sośnicki Wydział Fizyki Uniwersytet Warszawski 20.03.2019 Przypomnienie Prosty program liczący i wyświeltający wartość silni dla wprowadzonej z klawiatury liczby: 1 # include

Bardziej szczegółowo

Copyright by K. Trybicka-Francik 1

Copyright by K. Trybicka-Francik 1 Bezpieczeństwo systemów komputerowych Algorytmy kryptograficzne (2) mgr Katarzyna Trybicka-Francik kasiat@zeus.polsl.gliwice.pl pok. 503 Szyfry wykładnicze Pohlig i Hellman 1978 r. Rivest, Shamir i Adleman

Bardziej szczegółowo

INSTRUKCJA INSTALACJI I OBSŁUGI GPG4Win

INSTRUKCJA INSTALACJI I OBSŁUGI GPG4Win INSTRUKCJA INSTALACJI I OBSŁUGI GPG4Win Łukasz Awsiukiewicz Solid Security wew 1211 l.awsiukiewicz@solidsecurity.pl wersja 1.0 Pobieramy program gpg4win ze strony http://www.gpg4win.org/download.html.

Bardziej szczegółowo

Algorytmy w teorii liczb

Algorytmy w teorii liczb Łukasz Kowalik, ASD 2004: Algorytmy w teorii liczb 1 Algorytmy w teorii liczb Teoria liczb jest działem matemtyki dotyczącym własności liczb naturalnych. Rozważa się zagadnienia związane z liczbami pierwszymi,

Bardziej szczegółowo

LISTA 5. C++ PETLE for, while, do while

LISTA 5. C++ PETLE for, while, do while WSTEP DO INFORMATYKI I PROGRAMOWANIA LISTA 5. C++ PETLE for, while, do while Zadanie. Przeanalizuj działanie poniższego programu. cout

Bardziej szczegółowo

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41 Programowanie w C++ Wykład 2 Katarzyna Grzelak 5 marca 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41 Reprezentacje liczb w komputerze K.Grzelak (Wykład 1) Programowanie w C++ 2 / 41 Reprezentacje

Bardziej szczegółowo

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata MACIERZE Sobiesiak Łukasz Wilczyńska Małgorzata Podstawowe pojęcia dotyczące macierzy Nie bez przyczyny zaczynamy od pojęcia macierzy, które jest niezwykle przydatne we wszystkich zastosowaniach, obliczeniach

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

Czym jest kryptografia?

Czym jest kryptografia? Szyfrowanie danych Czym jest kryptografia? Kryptografia to nauka zajmująca się układaniem szyfrów. Nazwa pochodzi z greckiego słowa: kryptos - "ukryty", gráphein "pisać. Wyróżniane są dwa główne nurty

Bardziej szczegółowo

Kryptografia systemy z kluczem publicznym. Kryptografia systemy z kluczem publicznym

Kryptografia systemy z kluczem publicznym. Kryptografia systemy z kluczem publicznym Mieliśmy więc...... system kryptograficzny P = f C = f 1 P, gdzie funkcja f składała się z dwóch elementów: Algorytm (wzór) np. C = f(p) P + b mod N Parametry K E (enciphering key) tutaj: b oraz N. W dotychczasowej

Bardziej szczegółowo

Bezpieczeństwo danych, zabezpieczanie safety, security

Bezpieczeństwo danych, zabezpieczanie safety, security Bezpieczeństwo danych, zabezpieczanie safety, security Kryptologia Kryptologia, jako nauka ścisła, bazuje na zdobyczach matematyki, a w szczególności teorii liczb i matematyki dyskretnej. Kryptologia(zgr.κρυπτός

Bardziej szczegółowo

Podstawy programowania obiektowego

Podstawy programowania obiektowego Podstawy programowania obiektowego wykład 2 // na poprzednim wykładzie: using System; namespace ConsoleApplication1 class Program Console.Write("Podaj liczbę > "); // wczytywanie int x = int.parse(console.readline());

Bardziej szczegółowo

Copyright by K. Trybicka-Francik 1

Copyright by K. Trybicka-Francik 1 Bezpieczeństwo systemów komputerowych Algorytmy kryptograficzne (2) Szyfry wykładnicze Pohlig i Hellman 1978 r. Rivest, Shamir i Adleman metoda szyfrowania z kluczem jawnym DSA (Digital Signature Algorithm)

Bardziej szczegółowo

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w obrębie skryptu. Wyrażenia include() i require() są niemal

Bardziej szczegółowo

Zamiana porcji informacji w taki sposób, iż jest ona niemożliwa do odczytania dla osoby postronnej. Tak zmienione dane nazywamy zaszyfrowanymi.

Zamiana porcji informacji w taki sposób, iż jest ona niemożliwa do odczytania dla osoby postronnej. Tak zmienione dane nazywamy zaszyfrowanymi. Spis treści: Czym jest szyfrowanie Po co nam szyfrowanie Szyfrowanie symetryczne Szyfrowanie asymetryczne Szyfrowanie DES Szyfrowanie 3DES Szyfrowanie IDEA Szyfrowanie RSA Podpis cyfrowy Szyfrowanie MD5

Bardziej szczegółowo

Programowanie w Turbo Pascal

Programowanie w Turbo Pascal Skróty: ALT + F9 Kompilacja CTRL + F9 Uruchomienie Struktura programu: Programowanie w Turbo Pascal Program nazwa; - nagłówek programu - blok deklaracji (tu znajduje się VAR lub CONST) - blok instrukcji

Bardziej szczegółowo

Konstrukcje warunkowe Pętle

Konstrukcje warunkowe Pętle * Konstrukcje warunkowe Pętle *Instrukcja if sposób na sprawdzanie warunków *Konstrukcja: if(warunek) else { instrukcje gdy warunek spełniony} {instrukcje gdy warunek NIE spełniony} * 1. Wylicz całkowity

Bardziej szczegółowo

Treść wykładu. Pierścienie wielomianów. Dzielenie wielomianów i algorytm Euklidesa Pierścienie ilorazowe wielomianów

Treść wykładu. Pierścienie wielomianów. Dzielenie wielomianów i algorytm Euklidesa Pierścienie ilorazowe wielomianów Treść wykładu Pierścienie wielomianów. Definicja Niech P będzie pierścieniem. Wielomianem jednej zmiennej o współczynnikach z P nazywamy każdy ciąg f = (f 0, f 1, f 2,...), gdzie wyrazy ciągu f są prawie

Bardziej szczegółowo

Szyfrowanie RSA. Liczba pierwsza jest liczbą naturalną posiadającą dokładnie dwa różne podzielniki - 1 oraz samą siebie.

Szyfrowanie RSA. Liczba pierwsza jest liczbą naturalną posiadającą dokładnie dwa różne podzielniki - 1 oraz samą siebie. Szyfrowanie RSA Liczby pierwsze Na początek przypomnijmy sobie parę użytecznych wiadomości o liczbach pierwszych. Są one znane od starożytności a ich znaczenie jest ogromne w matematyce i tym bardziej

Bardziej szczegółowo

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std; Programowanie C++ Zadanie 1 Napisz program do obliczenia sumy i iloczynu ciągu liczb zakooczonego liczbą zero. Zakładamy, że ciąg zawiera co najmniej jedną liczbę (założenie to jest konieczne przy obliczeniu

Bardziej szczegółowo

Podstawy Programowania Podstawowa składnia języka C++

Podstawy Programowania Podstawowa składnia języka C++ Podstawy Programowania Podstawowa składnia języka C++ Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Szablon programu w C++ Najprostszy program w C++ ma postać: #include #include

Bardziej szczegółowo

INŻYNIERIA BEZPIECZEŃSTWA LABORATORIUM NR 2 ALGORYTM XOR ŁAMANIE ALGORYTMU XOR

INŻYNIERIA BEZPIECZEŃSTWA LABORATORIUM NR 2 ALGORYTM XOR ŁAMANIE ALGORYTMU XOR INŻYNIERIA BEZPIECZEŃSTWA LABORATORIUM NR 2 ALGORYTM XOR ŁAMANIE ALGORYTMU XOR 1. Algorytm XOR Operacja XOR to inaczej alternatywa wykluczająca, oznaczona symbolem ^ w języku C i symbolem w matematyce.

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy i struktury danych Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań praktycznych z egzaminów. Strona 1 z 12 Pytania praktyczne z kolokwium zaliczeniowego z 19 czerwca 2014 (studia dzienne)

Bardziej szczegółowo

Matematyka dyskretna. Wykład 11: Kryptografia z kluczem publicznym. Gniewomir Sarbicki

Matematyka dyskretna. Wykład 11: Kryptografia z kluczem publicznym. Gniewomir Sarbicki Matematyka dyskretna Wykład 11: Kryptografia z kluczem publicznym Gniewomir Sarbicki Idea kryptografii z kluczem publicznym: wiadomość f szyfrogram f 1 wiadomość Funkcja f (klucz publiczny) jest znana

Bardziej szczegółowo

2 Kryptografia: algorytmy symetryczne

2 Kryptografia: algorytmy symetryczne 1 Kryptografia: wstęp Wyróżniamy algorytmy: Kodowanie i kompresja Streszczenie Wieczorowe Studia Licencjackie Wykład 14, 12.06.2007 symetryczne: ten sam klucz jest stosowany do szyfrowania i deszyfrowania;

Bardziej szczegółowo

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe Podstawy programowania Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe 1 I. Składnia Składnia programu Program nazwa; Uses biblioteki; Var deklaracje zmiennych;

Bardziej szczegółowo

Instrukcja generowania certyfikatu PFRON i podpisywania dokumentów aplikacji SODiR w technologii JS/PKCS 12

Instrukcja generowania certyfikatu PFRON i podpisywania dokumentów aplikacji SODiR w technologii JS/PKCS 12 Instrukcja generowania certyfikatu PFRON i podpisywania dokumentów aplikacji SODiR w technologii JS/PKCS 12 Wersja 3.0 02-03-2017 Spis treści Instrukcja generowania certyfikatu PFRON i podpisywania dokumentów

Bardziej szczegółowo

Algorytmy i język C++

Algorytmy i język C++ Wykład 6 Wskaźniki Wskaźnik nie przechowuje wartości zmiennej ale, podobnie jak tablica, wskazuje miejsce w pamięci, w którym znajduje się zmienna danego typu. W poniższym przykładzie symbol * pomiędzy

Bardziej szczegółowo

2. W oknie dialogowym Choose Toolbox Items w zakładce.net Framework Components naciskamy przycisk Browse...

2. W oknie dialogowym Choose Toolbox Items w zakładce.net Framework Components naciskamy przycisk Browse... KORZYSTANIE Z KONTROLKI.NET LENDEVICERS232 DODAWANIE KONTROLKI DO ZBIORU KOMPONENTÓW DOSTĘPNYCH W PALECIE TOOLBOX (ŚRODOWISKA PROGRAMISTYCZNE FIRMY MICROSOFT) W środowisku programistycznym (Visual C++,

Bardziej szczegółowo

Materiały do zajęć III

Materiały do zajęć III Materiały do zajęć III Instrukcja wyboru if Spis treści I. Instrukcja wyboru if II. Wybór wielowariantowy III. Czy liczba podana przez użytkownika jest parzysta? IV. Wyjątki V. Instrukcje iteracji pętle

Bardziej szczegółowo

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu. Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu. Dr inż. Zofia Kruczkiewicz Dwa sposoby tworzenia apletów Dwa sposoby

Bardziej szczegółowo

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Programowanie w C++ Wykład 2 Katarzyna Grzelak 4 marca 2019 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Na poprzednim wykładzie podstawy C++ Każdy program w C++ musi mieć funkcję o nazwie main Wcięcia

Bardziej szczegółowo

1. Wypisywanie danych

1. Wypisywanie danych 1. Wypisywanie danych Przykłady 1.1. Napisz program, który wypisze na ekran słowa Hello, world!. 1 // Przyklad 1: Hello, world! 3 using namespace std; 5 int main() { 6 cout

Bardziej szczegółowo

3. Instrukcje warunkowe

3. Instrukcje warunkowe . Instrukcje warunkowe Przykłady.1. Napisz program, który pobierze od użytkownika liczbę i wypisze na ekran słowo ujemna lub nieujemna, w zależności od tego czy dana liczba jest ujemna czy nie. 1 #include

Bardziej szczegółowo

Podstawy JavaScript ćwiczenia

Podstawy JavaScript ćwiczenia Podstawy JavaScript ćwiczenia Kontekst:

Bardziej szczegółowo

Proste programy w C++ zadania

Proste programy w C++ zadania Proste programy w C++ zadania Zbiór zadao do samodzielnego rozwiązania stanowiący powtórzenie materiału. Podstawy C++ Budowa programu w C++ Dyrektywy preprocesora Usunięcie dublujących się nazw Częśd główna

Bardziej szczegółowo

WHILE (wyrażenie) instrukcja;

WHILE (wyrażenie) instrukcja; INSTRUKCJE ITERACYJNE WHILE, DO WHILE, FOR Instrukcje iteracyjne pozwalają powtarzać daną instrukcję programu określoną liczbę razy lub do momentu osiągnięcia określonego skutku. Pętla iteracyjna while

Bardziej szczegółowo

Płace Optivum. Jakie czynności musi wykonać pracownik, aby otrzymywać drogą elektroniczną paski z list płac?

Płace Optivum. Jakie czynności musi wykonać pracownik, aby otrzymywać drogą elektroniczną paski z list płac? Płace Optivum Jakie czynności musi wykonać pracownik, aby otrzymywać drogą elektroniczną paski z list płac? Program Płace Optivum umożliwia wysyłanie pracownikom pasków z list płac drogą elektroniczną.

Bardziej szczegółowo

Algorytmy i złożoności Wykład 5. Haszowanie (hashowanie, mieszanie)

Algorytmy i złożoności Wykład 5. Haszowanie (hashowanie, mieszanie) Algorytmy i złożoności Wykład 5. Haszowanie (hashowanie, mieszanie) Wprowadzenie Haszowanie jest to pewna technika rozwiązywania ogólnego problemu słownika. Przez problem słownika rozumiemy tutaj takie

Bardziej szczegółowo

Aplikacje WWW - laboratorium

Aplikacje WWW - laboratorium Aplikacje WWW - laboratorium JavaServer Pages Celem ćwiczenia jest zbudowanie kilku prostych stron internetowych z użyciem technologii JSP. Podczas ćwiczenia wykorzystany zostanie algorytm sortowania bąbelkowego

Bardziej szczegółowo