Comsec作业五:GF(2^8)乘法证明
ComSec
'''
# File : Prove_GF.py
# Author : Hongpei Lin
# Date : 20191016
# Purpose : prove GF(2^8)
'''
import copy
mod_number=[285,299,301,333,351,355,357,361,369,391,397,425,451,463,487,501]
#multilpy in GF(2^8)
def mul(a,b,n):
r=0
while b:
if b%2:
r=r^a#add operation : XOR
b=b>>1
if a&int('10000000',2)==0:#hightest bit's value = 0
a=a<<1
else:#hightest bit's value = 1
a=a<<1
a=a^n
return r
#jugde whether a list exists same element
def Judge_Same(a):
b=copy.deepcopy(a)
b.sort()
for i in range(len(a)-1):
if b[i]==b[i+1]:
return False
return True
#judge whether a list all values are "True"
def Judge_True(a):
for i in a:
if i==False:
return False
return True
final=[]
k=len(mod_number)-1
while k:
result = []
for i in range(1,256):
subresult=[]
for j in range(1,256):
subresult.append(mul(i,j,mod_number[k]))
result.append(Judge_Same(subresult))
final.append(Judge_True(result))
k-=1
print(Judge_True(final))