forked from kalmar/DALGLI0
104 lines
2.1 KiB
Plaintext
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()
|