Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
9 views
# Zad 1. Stosując szyfr Cezara ︠aa750149-144d-4469-af59-1aaa84273d1as︠ def Text2Licz (t): return map( lambda x: ord(x) -65,t) ####### funkcja do zamiany tekstu na liczby
def Licz2Text (l): return "".join (map ( lambda x: chr(x +65) ,l)) ### funkcja odwrotna - do zamiany liczb na tekst
# a) z przesunięciem 11 zaszyfruj słowo KALENDARZ
liczby = Text2Licz ('KALENDARZ') # zamiana napisu na ciag liczb liczby
[10, 0, 11, 4, 13, 3, 0, 17, 25]
liczby_szyfr = [(x+11) %26 for x in liczby ] # zastosowanie szyfru Cezara liczby_szyfr
[21, 11, 22, 15, 24, 14, 11, 2, 10]
Licz2Text ( liczby_szyfr ) # WYNIK szyfrowania
'VLWPYOLCK'
# b) odszyfruj słowo GDFOKRNWOB zakodowane z przesunięciem 14 ︠8d28900f-32df-4e87-be9b-c56d66fef1b5s︠ liczby_szyfr = Text2Licz ('GDFOKRNWOB') liczby2 = [(x -14) %26 for x in liczby_szyfr ] # ODSZYFROWANIE NA LICZBACH liczby2
[18, 15, 17, 0, 22, 3, 25, 8, 0, 13]
Licz2Text ( liczby2 ) # WYNIK DESZYFROWANIA
'SPRAWDZIAN'
# c) (metodę brute force) odszyfruj napis NSPEPSNEPRENSPERMIPSNEPRE oraz znajdź wartość przesunięcia zastosowaną w szyfrowaniu. ︠e63a1ee6-ebb0-432f-aac8-4e50984b72b5s︠ S_shift = ShiftCryptosystem ( AlphabeticStrings ())
P = S_shift.encoding ('NSPEPSNEPRENSPERMIPSNEPRE') P
NSPEPSNEPRENSPERMIPSNEPRE
S_shift = ShiftCryptosystem ( AlphabeticStrings ()) # szyfr z przesunieciem # zakodowanie tekstu za pomoca wielkich liter bez spacji : P = S_shift.encoding ("NSPEPSNEPRENSPERMIPSNEPRE ") P
NSPEPSNEPRENSPERMIPSNEPRE
K_shift = 8 C = S_shift . enciphering ( K_shift ,P) C
VAXMXAVMXZMVAXMZUQXAVMXZM
wynik = S_shift .brute_force (P) sorted ( wynik.items ())
[(0, NSPEPSNEPRENSPERMIPSNEPRE), (1, MRODORMDOQDMRODQLHORMDOQD), (2, LQNCNQLCNPCLQNCPKGNQLCNPC), (3, KPMBMPKBMOBKPMBOJFMPKBMOB), (4, JOLALOJALNAJOLANIELOJALNA), (5, INKZKNIZKMZINKZMHDKNIZKMZ), (6, HMJYJMHYJLYHMJYLGCJMHYJLY), (7, GLIXILGXIKXGLIXKFBILGXIKX), (8, FKHWHKFWHJWFKHWJEAHKFWHJW), (9, EJGVGJEVGIVEJGVIDZGJEVGIV), (10, DIFUFIDUFHUDIFUHCYFIDUFHU), (11, CHETEHCTEGTCHETGBXEHCTEGT), (12, BGDSDGBSDFSBGDSFAWDGBSDFS), (13, AFCRCFARCERAFCREZVCFARCER), (14, ZEBQBEZQBDQZEBQDYUBEZQBDQ), (15, YDAPADYPACPYDAPCXTADYPACP), (16, XCZOZCXOZBOXCZOBWSZCXOZBO), (17, WBYNYBWNYANWBYNAVRYBWNYAN), (18, VAXMXAVMXZMVAXMZUQXAVMXZM), (19, UZWLWZULWYLUZWLYTPWZULWYL), (20, TYVKVYTKVXKTYVKXSOVYTKVXK), (21, SXUJUXSJUWJSXUJWRNUXSJUWJ), (22, RWTITWRITVIRWTIVQMTWRITVI), (23, QVSHSVQHSUHQVSHUPLSVQHSUH), (24, PURGRUPGRTGPURGTOKRUPGRTG), (25, OTQFQTOFQSFOTQFSNJQTOFQSF)]
S_shift .brute_force (P , ranking ='chisquare') ##### Jola lojalna Jola nie lojalna, przesunięcie 4
[(0, NSPEPSNEPRENSPERMIPSNEPRE), (11, CHETEHCTEGTCHETGBXEHCTEGT), (12, BGDSDGBSDFSBGDSFAWDGBSDFS), (10, DIFUFIDUFHUDIFUHCYFIDUFHU), (22, RWTITWRITVIRWTIVQMTWRITVI), (13, AFCRCFARCERAFCREZVCFARCER), (24, PURGRUPGRTGPURGTOKRUPGRTG), (17, WBYNYBWNYANWBYNAVRYBWNYAN), (15, YDAPADYPACPYDAPCXTADYPACP), (3, KPMBMPKBMOBKPMBOJFMPKBMOB), (8, FKHWHKFWHJWFKHWJEAHKFWHJW), (4, JOLALOJALNAJOLANIELOJALNA), (1, MRODORMDOQDMRODQLHORMDOQD), (9, EJGVGJEVGIVEJGVIDZGJEVGIV), (20, TYVKVYTKVXKTYVKXSOVYTKVXK), (2, LQNCNQLCNPCLQNCPKGNQLCNPC), (23, QVSHSVQHSUHQVSHUPLSVQHSUH), (19, UZWLWZULWYLUZWLYTPWZULWYL), (6, HMJYJMHYJLYHMJYLGCJMHYJLY), (21, SXUJUXSJUWJSXUJWRNUXSJUWJ), (25, OTQFQTOFQSFOTQFSNJQTOFQSF), (7, GLIXILGXIKXGLIXKFBILGXIKX), (5, INKZKNIZKMZINKZMHDKNIZKMZ), (18, VAXMXAVMXZMVAXMZUQXAVMXZM), (16, XCZOZCXOZBOXCZOBWSZCXOZBO), (14, ZEBQBEZQBDQZEBQDYUBEZQBDQ)]
# Zad 2. Wygeneruj listę 10 liczb nieparzystych (od 1) w zapisie # a) binarnym bez przedrostków ︠d632051c-3f36-4e22-9e4a-d9a66c465489s︠ b = [(2*x+1) for x in range (10)] b
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
b [ Integer (x ).binary () for x in b]
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19] ['1', '11', '101', '111', '1001', '1011', '1101', '1111', '10001', '10011']
# b) binarnym z przedrostkami [bin (x) for x in b]
['0b1', '0b11', '0b101', '0b111', '0b1001', '0b1011', '0b1101', '0b1111', '0b10001', '0b10011']
# c) szesnastkowym ︠72820d2d-72ed-4a73-b615-733d4c632311s︠ [hex (x) for x in b ]
['1', '3', '5', '7', '9', 'b', 'd', 'f', '11', '13']
# d) dziesiętnym ︠7992c31f-01ee-4f54-9925-b9db011274b6︠
# e) o podstawie 4 ︠bc566235-d7e6-4a1e-bcd1-a51058af9d40︠ # Zad 3. Zapisz liczbę szesnastkową def w postaci # a) dziesiętnej ︠4054957c-2e15-4556-802b-b1f67242059as︠ Integer ('def', 16)
3567
# b) binarnej ︠e748170e-f510-4ae1-8bcd-02cb8f72523ds︠ bin ( Integer ('def', 16) )
'0b110111101111'
# Zad 4. Za pomocą kodowania base64 # a) zaszyfruj napis "Szedl Szasa szosa sucha" ︠04ae7329-f9c4-4963-b8a9-b8f4cf06ccf1s︠ import base64
ha = ("SzedlSzasaszosasucha") bha = base64 .b64encode ("SzedlSzasaszosasucha")
bha
'U3plZGxTemFzYXN6b3Nhc3VjaGE='
# b) odszyfruj napis "S3JvbCBLYXJvbCBrdXBpbCBrcm9sb3dlaiBLYXJvbGluaWUga29yYWxlIGtvbG9ydSBrb2xvcm93ZWdv" ︠33f27dc4-2bc1-4551-b402-bdf57262838fs︠ base64.b64decode (bha ) base64.b64decode (bha )== ha
'SzedlSzasaszosasucha' True
# Zad 5. Oblicz skrot teksu "Szedl Szasa szosa sucha" korzystając z funkcji skrotu # a) sha265 (wyświetl wynik w zapisie binarnym) ︠b336833e-9061-4ec6-b979-edd960d54433s︠ import hashlib
hashlib .sha256 ('Szedl Szasa szosa sucha').digest ()
'\xa8\xd6\xf2\x88M\xfaL\x17xb\x8c\xf3[\x96\xc7\x05;\xfd\x9b\xf5\x146i\xc3\xc3\x94\x8eA\x9e\xfc\xb3\x9f'
# b) sha512 (wyświetl wynik w zapisie szesnastkowym) ︠9b45c15d-9370-444b-a6e9-c47ca868451es︠ hashlib .sha512 ('Szedl Szasa szosa sucha').hexdigest () # ######### obliczenie funkcji skrtu i zapis w postaci szesnastkowej
'682195c98e37426a783fd4070396ab2f93d613ab3cf3137a5e7527d5d58232d3bd3a592dffe2fea08d3f8567f226927b1fa42a35fd0497e80d6ac8760874b6e3'
# Zad 6. Wylosuj listę 8 elementow z grupy Z_27 i wylicz dla każdego jego element odwrotny jeśli istnieje (wyniki rowniez umiesc na liscie). Nastepnie sprawdz czy ich iloczyn w grupie Z_25 rzeczywiscie da 1. ︠b42b15ad-4490-463a-8b9c-68d0dd78a1ba︠ ︠a6360343-ff1b-4a4d-8f20-7c25ffa3bf89︠ # Zad 7. Wyznacz zbior elementow odwracalnych dla Z_18, oblicz jej rzad i wyznacz "tabelke mnozenia" ︠3d61910a-ad75-4bbd-a6b0-fe5eb6c2242fs︠ def zb_el_odwr (n): u= [k for k in range (1,n) if gcd (k,n) ==1] return u
zb_el_odwr(18)
[1, 5, 7, 11, 13, 17]
def euler (n): u = zb_el_odwr (n) return len(u)
euler(18) # rząd
6
n=18 u= zb_el_odwr (n) [[ mod(k,n)*mod(l,n) for l in u] for k in u] # ###### tabliczka mnozenia
[[1, 5, 7, 11, 13, 17], [5, 7, 17, 1, 11, 13], [7, 17, 13, 5, 1, 11], [11, 1, 5, 13, 17, 7], [13, 11, 1, 17, 7, 5], [17, 13, 11, 7, 5, 1]]
# Zad 8. Dla każdego elementu z grupy Z^*_14 oblicz jego rząd i wyznacz podgrupę cykliczną generowaną przez ten element. ︠6ce56da0-801d-49e5-9e64-e42d5bf637b6s︠ zb_el_odwr (14)
[1, 3, 5, 9, 11, 13]
[Mod(x ,14).multiplicative_order () for x in [1, 3, 5, 9, 11, 13]]
[1, 6, 6, 3, 3, 2]
n = 14 u= zb_el_odwr (n) matrix ([[ mod(k,n)*mod (l,n) for l in u ] for k in u])
[ 1 3 5 9 11 13] [ 3 9 1 13 5 11] [ 5 1 11 3 13 9] [ 9 13 3 11 1 5] [11 5 13 1 9 3] [13 11 9 5 3 1]
euler(14) # rząd grupy; Grupa jest cykliczna bo występuje rząd elementu taki jak rząd grupy
6
# Zad 9. Za pomoca znajdowania pierwiastków pierwotnych zbadaj, która z liczb 997, 998, 999 jest pierwsza. Zbadaj i napisz odpowiedzi dla każdej liczby. ︠69cdda84-4134-4d7c-92f0-fd03a1594e12s︠ primitive_root(997) #### liczba pierwsza
7
primitive_root(998) ## liczba pierwsza
7
primitive_root(999) #### nie jest to liczba pierwsza
Error in lines 1-1 Traceback (most recent call last): File "/projects/6e31eb91-4297-4c90-b445-8b5f6746ebe8/.sagemathcloud/sage_server.py", line 879, in execute exec compile(block+'\n', '', 'single') in namespace, locals File "", line 1, in <module> File "/usr/local/sage/sage-6.5/local/lib/python2.7/site-packages/sage/rings/arith.py", line 3697, in primitive_root raise ValueError("no primitive root") ValueError: no primitive root
# Zad 10. Dla liczby pierwszej 0xD55F35EBCBEE8E190350ECA2C66AAC5471C1FF8FE99F2178212AD7CC55ADB34740F50F019EAD5115D6E02572A0A17770930C43929D203492572DEB0284AC681F792F759C58FBEB61FDA36C63DC7B6B70A5DC811237BE15C586E4796156E7E06D2EE16842FA3A67DAD4CC254566D59DCD3A8DE0EAE2BD5AE0F22BCC1C3416666F przeprowadź i opisz protokuł uzgadniania klucza Dieffie-Hellman. ︠04f357e2-be89-4c62-8244-471a2b036959s︠ p ='0xD55F35EBCBEE8E190350ECA2C66AAC5471C1FF8FE99F2178212AD7CC55ADB34740F50F019EAD5115D6E02572A0A17770930C43929D203492572DEB0284AC681F792F759C58FBEB61FDA36C63DC7B6B70A5DC811237BE15C586E4796156E7E06D2EE16842FA3A67DAD4CC254566D59DCD3A8DE0EAE2BD5AE0F22BCC1C3416666F' p
'0xD55F35EBCBEE8E190350ECA2C66AAC5471C1FF8FE99F2178212AD7CC55ADB34740F50F019EAD5115D6E02572A0A17770930C43929D203492572DEB0284AC681F792F759C58FBEB61FDA36C63DC7B6B70A5DC811237BE15C586E4796156E7E06D2EE16842FA3A67DAD4CC254566D59DCD3A8DE0EAE2BD5AE0F22BCC1C3416666F'
p=ZZ(p) # zamiana napisu na liczbe p
149834855273877507773889198939582059501754343527640228832238803819043659246721521298887139550501651828717002536530820210558599452506448776872214258502950764670328731708694099763303272219372696428217687939085800862909182781589886219385352166209131512963814142485006835161177947529711179377333824322672629540463
# sprawdzenie czy p jest liczba pierwsza ( kilka sposobow ) is_pseudoprime (p) is_prime (p) r = primitive_root (p) rp = mod(r,p) # rp: r jako element Z_p multiplicative_order (rp)==p -1 # rzad rp w Z^* _p = p -1
True True True
# protokul Diffie - Hellman uzgadniania klucza p # jawna liczba pierwsza p r= primitive_root (p) # jawny pierwiastek pierwotny z p r
149834855273877507773889198939582059501754343527640228832238803819043659246721521298887139550501651828717002536530820210558599452506448776872214258502950764670328731708694099763303272219372696428217687939085800862909182781589886219385352166209131512963814142485006835161177947529711179377333824322672629540463 5
# ----------- A -------------- j = randint (2,p -2) # tajna liczba z zakresu 2<= j <= p -2 (zna tylko A) j # klucz prywatny A a = power_mod (r,j,p) # jawna liczba a = r^j mod p a # klucz publiczny przesylany do B
54831282489162849402433300928917318213696322924289570744923331482071148525366130067110248970899467098803507431607596652165864459173106853315379632102974750007930302370389525255247802209390436718298732328074740555503619401311097376916820695950243974536527224716779828263287253630618313004658615133887848471720L 1895857752945532890081921264565840399277097206741321928833586002395369548347008989318721796476162927997522045145458493692499899161027552330917023302026388020148296500319039793921301603093126706073241490080273635531359172865279624891277806842278141802956705788976702541779896262198140180009297332715375965879
# ----------- B -------------- k = randint (2,p -2) # tajna liczba z zakresu 2<= k <= p -2 (zna tylko B) k # klucz prywatny B b = power_mod (r,k,p) # jawna liczba b = r^k mod p b
69996066011062372157494583258896767304448574660042587862894469478712667438656495691974699339685823624875365996404573301361246140710705725577637620689133562739343930942278043446140272868973084873012979842100664636070354503825248371790108724231471652864501838045570684961133662095166898497955860578236932713738L 25405464723961442940110005972579706352513791182448602134972301196096651514818330089374082969339448048129838746067722502732915510674888962923165658015426100310850296924279952582610594372272811397266775208664912920982231392172625431525228065349670751291563673187868070338407186562276843625848243267266717463006
# A sprawdza symbol Legendre ’a dla klucza publicznego b pow (b ,(p -1) /2,p)==1 # A generuje klucz wspolny ( tajny ) na podstawie b i klucza prywatnego j klucz = power_mod (b,j,p) klucz
True 121615663935178692608574251745892466121739155502331850045345289201672761151434187066691531594925321686064985576996733177757756156044845205724933623904946847349620642213802969789436919521767073421541584030616351025798023582020955550212849087512927803075043346812134380741336483281482194495438280063958605466253
# to samo dla B pow (a ,(p -1) /2,p)==1 # B generuje klucz wspolny ( tajny ) na podstawie a i klucza prywatnego k klucz = power_mod (a,k,p) klucz
True 121615663935178692608574251745892466121739155502331850045345289201672761151434187066691531594925321686064985576996733177757756156044845205724933623904946847349620642213802969789436919521767073421541584030616351025798023582020955550212849087512927803075043346812134380741336483281482194495438280063958605466253
# czy A i B wygenerowaly ten sam klucz wspolny ? power_mod (a,k,p) == power_mod (b,j,p) klucz # wyliczenie klucza na podstawie kluczy prywatnych klucz == power_mod (r,j*k,p)
True 121615663935178692608574251745892466121739155502331850045345289201672761151434187066691531594925321686064985576996733177757756156044845205724933623904946847349620642213802969789436919521767073421541584030616351025798023582020955550212849087512927803075043346812134380741336483281482194495438280063958605466253 True
︠e53a4873-dae9-46c8-82df-3770093799ae︠ # Zad 11. Otrzymałeś wiadomość zakodowaną w systemie ElGamal: (11888968535768174160558125050971934425217979600666, 3284177382069023392461271507202936195497937059743). Odszyfruj ją. Twoje klucze to 19279925378618992601011664494988164396776235152136 oraz (21004686380765859348200631283534141361634697092089, 3, 8952338390620200521588363416616820568609938968904) ︠2f6d646c-2b8e-438a-a1cb-21fba05d4cc2s︠ from Crypto . PublicKey import ElGamal from Crypto import Random # pobranie losowych danych losowe = Random .new (). read # generowanie kluczy klucze = ElGamal .generate (1024L, losowe )
klucze . keydata # parametry dostepne w obiekcie klucze
['p', 'g', 'y', 'x']
p=21004686380765859348200631283534141361634697092089
r=primitive_root (p) r
3
k =19279925378618992601011664494988164396776235152136
a=pow(r,k,p) a kluczPubliczny = [p,r,a]
8952338390620200521588363416616820568609938968904
from Crypto . PublicKey . pubkey import *
c1 = [11888968535768174160558125050971934425217979600666] c1 c2 = [3284177382069023392461271507202936195497937059743] c2
[11888968535768174160558125050971934425217979600666] [3284177382069023392461271507202936195497937059743]
szyfr = matrix ([[ c1[i],c2[i]] for i in range ( len (c1))]) szyfr
[11888968535768174160558125050971934425217979600666 3284177382069023392461271507202936195497937059743]
c3 = [pow(c,p -1-k,p) for c in c1] P = [( c2[i]* c3[i])%p for i in range ( len (c1))] P
[116242433848330014717355143802641868065]
tekst ="" for t in P: tekst = tekst +" "+ long_to_bytes (t) print tekst
Wszystko dobrze!
# Zad 12. Wygeneruj 1024 bitowy klucz w systemie ElGamal. Następnie przeprowadź i opisz proces szyfrowania wiadomości "Szyfrowanie wiadomości". ︠5125c522-3055-448a-a80f-38a0dbe75628s︠ from Crypto . PublicKey import ElGamal from Crypto import Random
# pobranie losowych danych losowe = Random .new (). read # generowanie kluczy klucze = ElGamal . generate (1024L, losowe )
klucze . keydata # parametry dostepne w obiekcie klucze
['p', 'g', 'y', 'x']
p = klucze .p # p - liczba pierwsza p is_pseudoprime (p)
106415031525411509557602311420503076792997899373097171595303652014955078622130625209282376834579668929361449724944219836904695385135489590399472867661020053248673663227784332575451145871356676202308069170941767039789986511774099981699794207198823009590113870397805911868036220369991318555355354368559862513147L True
r = klucze .g # r - pierwiastek pierwotny p r
76789824236900407779087506710515467219223581181381691532948517514007766026758705705184409852712279477625468773759062863267094935007959516264706333592531343316861378334114696401577512193839728244532002261826932613732338370329399174148996045206394164702178572325954541021739245712428802642772865027585419819718L
k = klucze .x # k- klucz prywatny k
5052442309114449809089912599311623527583557592489326270744520452158289554231962835721852490558107876454273369762620823060652160564767731268613894704614139359036274873098402233657674905533345796460030248987227482984452431544736194965398528092862849410844550306371550227119050857273463042704870100411059887552L
a = klucze .y # a=r^k mod p ; klucz publiczny : (p,r,a) a pow (r,k,p) == a # sprawdzenie
36815638151472374659350584315994446731473218005918115677315824650013131403519976449595137758204663053802394083349511445300995667174475063966955694126184051472469454493204156253102224735470618578608909009189216778752364025915845727973764893269411632513558930664547346516326056352342594934511147480887558453672L True
tekst = " Szyfrowanie wiedomosci " # wiadomosc c1 , c2 = klucze . encrypt (tekst , " abcd ") # " abcd " uzywane do szyfrowania c1 c2
'\x85\x08\xdd\xe0\x84\x12\r\x8f\xf6\xa6\xa3\x16za0*\x84{%OLgu\xf9\xd1\xe6\x08O\x86S\xbd\xd6\xb4\xfa\x14\x92Y0\xf6\xc5\xd2O\xc2\x94^\x1b\xc5\x84\xd1,!F6\xffj\x88_\xd0\xbd\xa6T\xaah\x05^A\x0e\xe45\x92\xc8\xe2+<\xf2\xb5\x06\x05\xf4=\xa9\xe8K.+\x08E\xb7\xda\xf4p\x90\x9dm#\xcb\x89\xce\x9f\xf4\x8eG-_\xfd\x17(\x89\xef\xed\xdeQ\xb6M9\xbd\x81\xda\xe6\xc0\x07\xae"\x03\x81\x0c\x10T' "\x84\xa5\x18\xa0\x00\x91~E\x99q%p\x1b\x1dh\x9e\xc5\x84\xd76\xed\xe3[\x8aa\xbcH\x14\xf7\xb7'\xcf\x1b\x17\xe5\n\x00\xfd\xe4\xb1\xbd\x12\x1c\x05\xfa,\x9a\xb9\xd6(\x1c\xd2p\xdd\xcd\xe4\xf4\x08\x03\xd7\xc7<\xe0\xe8\xf9\xf0_\xf3\x97\x8d\xbbTM\x14o;\xf1R\xf7+\xb5\x02\xb5\xff\xc8\x86\x89\xd0\t.]\xb5\xf5ch<7>\x7f\xfd\x9e8\x97$\x8e\x9c\xde\x9b\xcf\xd7\x9c\x9a\xec^\x19!\xd2\xfa3[\xb4r{Q^N\xc6s"
from Crypto . PublicKey . pubkey import * bytes_to_long (c1) bytes_to_long (c2)
93420098074734554741392827854630833214150556200846888751066876045120686392338254747051773609148669901531692993740574306674930570467206289520236659443535540165018349570889082030952928791828483288666266906775419608329053994680299968720763338471120711572922794179453109528383198669033681334670765004845233213524L 93146421361101084940467699559283520526869684853964865573718489103162984179339246359538943595524033946846709486209781852286121011753962587397839342995882151657340537611001765595006223120297698134258283919578308534630253342755100591690247612782027550482123510762517521661632130314364709781743866932066698315379L
j = bytes_to_long (" abcd ") # odpowiednik liczbowy " abcd " bytes_to_long (c1)== pow(r,j,p) # c1 = r^j mod p
True
B = bytes_to_long ( tekst ) # liczbowy odpowiednik wiadomosci bytes_to_long (c2)==(B*pow(a,j,p))%p # c2= B*a^j mod p
True
P = klucze . decrypt ((c1 ,c2)) # deszyfrowanie P
' Szyfrowanie wiedomosci '
# Zadania do zrobienia w TERMINALU - napisz polecenia terminala za pomocą ktorych: # Zad 13. Zakodujesz słowo "Sprawdzian" szyfrem aes (wynik w pilku, w postaci binarnej) i odkodujesz je (wynik na konsoli). #echo "Sprawdzian" > szyfr.txt #openssl aes-256-cbc -in szyfr.txt # Zad 14. Zapiszesz do pliku swoje imie i nazwisko, a następnie obliczysz skrot tego pliku (wynik na konsoli). Uzyj dowolnej funkcji skrotu dostepnej w openssl. #echo "Kinga Zaawa Osiedle blok 6/26 28-366 Malogoszcz" > dane.txt #openssl sha1 -out w2.txt dane.txt # Zad 15. Wygenerujesz 512-bitowy parametr do protokołu Dieffiego-Hellmana z generatorem 5. Wynik zapisz w pliku, w postaci szesnastkowej, w 1-2 liniach, bez separatorow ":". Następnie sprawdź poprawność wygenerowanego parametru za pomocą funkcji w openssl.