有限域GF(2^8)上的乘法運算可以看成多項式的乘法
5e轉換成二進制為0101 1110,對應的多項式為x^6+x^4+x^3+x^2+x
3f轉換成二進制為0011 1111,對應的多項式為x^5+x^4+x^3+x^2+x+1
將這兩個多項式相乘再模多項式x^8+x^4+x^3+x+1得到結果為1110 0101,轉換為十六進制為e5
代碼實現
def gf256_multiply(a_hex, b_hex):a = int(a_hex, 16) # 將十六進制字符串轉換為整數b = int(b_hex, 16)result = 0while a > 0 and b > 0:if b & 1: # 如果b的最低位為1result ^= a # 則將a與結果異或a <<= 1 # 將a左移一位if a & 0x100: # 如果a的最高位為1a ^= 0x11B # GF(2^8)上的不可約多項式 1b >>= 1 # 將b右移一位return hex(result)[2:] # 將結果轉換為十六進制字符串,去掉前綴'0x'# 輸入兩個GF(2^8)上的十六進制元素
a_hex = input("請輸入GF(2^8)上的十六進制元素 a:")
b_hex = input("請輸入GF(2^8)上的十六進制元素 b:")result_hex = gf256_multiply(a_hex, b_hex)
print(f"{a_hex} * {b_hex} = {result_hex} (GF(2^8))")
運行結果