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()