Compare commits

...

18 Commits

Author SHA1 Message Date
9c6a607f34 Update 'Zadanie3' 2018-06-29 21:11:50 +00:00
1dc92f3872 Update 'Zadanie3' 2018-06-29 17:42:53 +00:00
ddb7a240f4 Update 'Zadanie3' 2018-06-29 17:13:42 +00:00
e5905c0a8a Update 'Zadanie3' 2018-06-29 16:57:17 +00:00
1a71d479a5 Update 'Zadanie3' 2018-06-29 16:55:21 +00:00
2ba847f726 Update 'Zadanie3' 2018-06-29 16:27:46 +00:00
504f4a3c5a Update 'Zadanie3' 2018-06-29 16:26:06 +00:00
c624158b50 Update 'Zadanie3' 2018-06-29 16:16:51 +00:00
066de73659 Update 'Zadanie3' 2018-06-29 15:49:34 +00:00
7e1e1a7348 Update 'Zadanie3'
Encode jako bytearray, decode wciąż działa wybiórczo
2018-06-29 15:36:03 +00:00
b8a923877f Update 'Zadanie3' 2018-06-27 23:07:44 +00:00
2a39bdbcdf Zadanie3
Encode wygląda okej
2018-06-27 21:30:58 +00:00
65909526af Update 'Zadanie3' 2018-06-25 17:53:53 +00:00
5ddd10b5e2 Update 'Zadanie3' 2018-06-21 21:10:19 +00:00
2141c5b1f6 Update 'Zadanie3'
true/false dla reszty
2018-06-21 12:48:23 +00:00
c8a2112082 Zadanie3
Wersja 1, dla wielomianów przedstawionych binarnie, bez ascii
2018-06-20 21:29:22 +00:00
a96da65f41 Usuń 'Wielomiany' 2018-06-08 14:22:53 +00:00
7fcd497e1f Dodaj 'Wielomiany' 2018-06-06 20:54:04 +00:00

160
Zadanie3 Normal file
View File

@ -0,0 +1,160 @@
from sys import argv
import sys
import binascii
import base64
def binnahex(var):
all = {"0000": "0",
"0001": "1",
"0010": "2",
"0011": "3",
"0100": "4",
"0101": "5",
"0110": "6",
"0111": "7",
"1000": "8",
"1001": "9",
"1010": "A",
"1011": "B",
"1100": "C",
"1101": "D",
"1110": "E",
"1111": "F"
}
i = 0
output = ""
while (len(var) % 4 != 0):
var = "0" + var
while (i < len(var)):
output = output + all[var[i:i + 4]]
i = i + 4
output = output.lstrip("0")
output = "0" if len(output) == 0 else output
return output
#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 = "10001000000100001"
# 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,crc):
poly16 = "10001000000100001"
l_poly16 = len(poly16)
message = bytearray(message, 'ascii')
message = format(int.from_bytes(message, "big"), "b")
while len(message) % 8 != 0:
message = "0" + message
dec = int(crc, 16)
crc2=bin(dec)[2:]
while len(crc2) % 8 != 0:
crc2 = "0" + crc2
msg=message+crc2
while len(msg) % 8 != 0:
msg = "0" + msg
obroc = list(msg)
for i in range(l_poly16 - 1):
if obroc[i] == "0":
obroc[i] = "1"
elif obroc[i] == '1':
obroc[i] = "0"
msg = "".join(obroc)
remainder = divide(msg)
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 = "10001000000100001"
a=message
message = bytearray(message, 'ascii')
message = format(int.from_bytes(message, "big"), "b")
l_poly16 = len(poly16)
message = message + '0'*(l_poly16-1)
while len(message) % 8 != 0:
message = "0" + message
obroc = list(message)
for i in range(l_poly16 - 1):
if obroc[i] == "0":
obroc[i] = "1"
elif obroc[i] == '1':
obroc[i] = "0"
message = "".join(obroc)
remainder = divide(message)
ab=binnahex(remainder)
d=str(base64.b16decode(ab))[2:-1]
message_final = a + d
message_final = bytearray(message_final, 'ascii')
d = bytearray(d, 'ascii')
print("calosc : ", message_final)
print("crc hex : ", ab)
print("crc ascii : ", d)
decode(a,ab)
def main():
global message
message = list(argv[1])
flag = argv[2]
if flag == 'encode':
encode(sys.argv[1])
elif flag == 'decode':
crc = argv[3]
decode(sys.argv[1],sys.argv[3])
if __name__ == '__main__':
main()