defgetzero(vec): M = Matrix(GF(2) , 32 , len(vec)) for i inrange(len(vec)): temp = vec[i] for j inrange(32): if temp %2 == 1: M[j,i] = 1 temp //= 2 tempM = M M = M.rref() #行阶梯型 resvec = [] one_position = [] for i inrange(32): for j inrange(len(vec)): if M[i , j] == 1: one_position.append(j) break else: break for i inrange(len(vec)): tempv = vector(GF(2) , len(vec)) if i in one_position: continue tempv[i] = 1 for j inrange(32): if M[j , i] == 1: tempv[one_position[j]] = 1 resvec.append(tempv) res = resvec return res
defapply_vec(ms,vecs): newlist = [] for m in ms: templist = [] for v in vecs: temp = 0 for i inrange(len(v)): if v[i] == 1: temp ^= m[i] templist.append(temp) newlist.append(templist) return newlist defapply_y(y,vecs): res = [] for v in vecs: temp = 0 for j inrange(len(v)): if v[j] == 1: temp ^= y[j] res.append(temp) return res
deftolist(y): res = [] for i inrange(1280): temp = 0 for j inrange(5): temp <<=1 temp += int(y[i*5+j]) res.append(temp) return res y = tolist(y) ms = [] size = 64 for i in xs: temp = [[j] for j in i[:1280]] ms.append(temp) for i inrange(39): vecs = getzero(ms[0]) y1 = apply_y(y , vecs) print(y1[:64]) for i in y1: if i != 0: y = y1 break else: print('y is zero') break ms = ms[1:] print(len(vecs)) ms = apply_vec(ms , vecs) print(y)
y = m = table = '0123456789abcdefghijklmnopqrstuy' defgetzero(m , c): M = Matrix(GF(2) , len(m) , 32) for i inrange(len(m)): temp = m[i] for j inrange(32): if temp %2 == 1: M[i,j] = 1 temp //= 2 v = vector(GF(2) , len(m)) for i inrange(len(y)): v[i] = y[i]%2 return M.solve_right(v)
dic = {} for i inrange(32): dic[table[i]] = 0 for i inrange(5): temp = getzero(m , y) for j inrange(32): dic[table[j]] += int(temp[j]) * 2**i y = [x >> 1for x in y] print(dic)