1
0
forked from kalmar/DALGLI0
DALGLI0/Zadanie3

104 lines
2.1 KiB
Plaintext

from sys import argv
def toString(binaryString):
return "".join([chr(int(binaryString[i:i+8],2)) for i in range(0,len(binaryString),8)])
def toBinary(string):
return "".join([format(ord(char),'#010b')[2:] for char in string])
#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 decode(message_final,poly16):
l_poly16 = len(poly16)
appended_message2 = message_final
remainder = divide(appended_message2, poly16)
#Poprawione sprawdzanie
suma = 0
for i in range(0, len(remainder)):
if '1' in remainder:
suma = suma+1
if suma == 0:
print("true ")
elif suma > 0:
print("false")
def encode(message, poly16):
#konwersja z ascii do binarnego
aa=toBinary(message)
l_poly16 = len(poly16)
# Dodajemy n-1 "0" do wiadomosci
appended_message = aa + '0'*(l_poly16-1)
remainder = divide(appended_message, poly16)
message_final = aa + remainder
print("binarnie calosc : ", message_final)
#konwersja z binarnego do ascii
ab=toString(message_final)
print("w ascii : ", ab)
print("sprawdzenie : ")
decode(message_final, poly16)
poly16 = "10001000000100001"
def main():
global message
message = list(argv[1])
flag = argv[2]
if flag == 'encode':
encode(message, poly16)
if __name__ == '__main__':
main()