Zadanie3 #28
77
Zadanie3
Normal file
77
Zadanie3
Normal file
@ -0,0 +1,77 @@
|
||||
#XOR
|
||||
def xor(a, b):
|
||||
|
||||
# init
|
||||
result = []
|
||||
|
||||
# porownuje znaki
|
||||
for i in range(1, len(b)):
|
||||
if a[i] == b[i]:
|
||||
result.append('0')
|
||||
else:
|
||||
result.append('1')
|
||||
|
||||
return ''.join(result)
|
||||
|
||||
|
||||
# dzielenie modulo 2
|
||||
def divide(message, poly16):
|
||||
|
||||
# Ilosc bitow dla operacji XOR 'na raz'
|
||||
step = len(poly16)
|
||||
|
||||
# podzial krok po kroku
|
||||
temp = message[0 : step]
|
||||
|
||||
while step < len(message):
|
||||
|
||||
if temp[0] == '1':
|
||||
|
||||
temp = xor(poly16, temp) + message[step]
|
||||
|
||||
else:
|
||||
# jezeli 1 bit po lewej == 0
|
||||
temp = xor('0'*step, temp) + message[step]
|
||||
|
||||
# kolejny krok
|
||||
step += 1
|
||||
|
||||
if temp[0] == '1':
|
||||
temp = xor(poly16, temp)
|
||||
else:
|
||||
temp = xor('0'*step, temp)
|
||||
|
||||
check = temp
|
||||
return check
|
||||
|
||||
|
||||
def encode(message, poly16):
|
||||
|
||||
l_poly16 = len(poly16)
|
||||
|
||||
# Dodajemy n-1 "0" do wiadomosci
|
||||
appended_message = message + '0'*(l_poly16-1)
|
||||
remainder = divide(appended_message, poly16)
|
||||
|
||||
message_final = message + remainder
|
||||
print("calosc : ",
|
||||
message_final)
|
||||
|
||||
|
||||
|
||||
def decode(message2, poly16):
|
||||
|
||||
l_poly16 = len(poly16)
|
||||
appended_message2 = message2
|
||||
remainder = divide(appended_message2, poly16)
|
||||
print("reszta : ", remainder)
|
||||
|
||||
|
||||
|
||||
poly16 = "10001000000100001"
|
||||
print("podaj wiadomosc do zakodowania : ")
|
||||
message = str(raw_input())
|
||||
encode(message, poly16)
|
||||
print("podaj wiadomosc do odkodowania : ")
|
||||
message2 = str(raw_input())
|
||||
decode(message2, poly16)
|
Loading…
Reference in New Issue
Block a user