forked from kalmar/DALGLI0
78 lines
1.5 KiB
Plaintext
78 lines
1.5 KiB
Plaintext
|
#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)
|