gpt4 book ai didi

python - 使用 Python 3 计算 gf(2^8) 中的乘法逆的纯 Python 方法

转载 作者:太空宇宙 更新时间:2023-11-04 09:56:54 24 4
gpt4 key购买 nike

如何在 Python 3 中实现 GF2^8 中的乘法逆?我当前的功能如下所示:

def gf_add(a, b):
return a ^ b

def gf_mul(a, b, mod=0x1B):
p = bytes(hex(0x00))
for i in range(8):
if (b & 1) != 0:
p ^= a
high_bit_set = bytes(a & 0x80)
a <<= 1
if high_bit_set != 0:
a ^= mod
b >>= 1
return p

最佳答案

这是我的做法:

def gf_degree(a) :
res = 0
a >>= 1
while (a != 0) :
a >>= 1;
res += 1;
return res

def gf_invert(a, mod=0x1B) :
v = mod
g1 = 1
g2 = 0
j = gf_degree(a) - 8

while (a != 1) :
if (j < 0) :
a, v = v, a
g1, g2 = g2, g1
j = -j

a ^= v << j
g1 ^= g2 << j

a %= 256 # Emulating 8-bit overflow
g1 %= 256 # Emulating 8-bit overflow

j = gf_degree(a) - gf_degree(v)

return g1

函数 gf_degree 计算多项式的次数,而 gf_invert 自然地反转 GF(2^8) 的任何元素,当然 0 除外。gf_invert 的实现遵循“教科书”算法来寻找有限域元素的乘法逆。

示例

print(gf_invert(5))   # 82
print(gf_invert(1)) # 1
print(gf_invert(255)) # 28

Here is a live demo .

如评论中所述,您也可以使用对数方法,或者简单地使用蛮力(尝试乘法的每种组合)。

关于python - 使用 Python 3 计算 gf(2^8) 中的乘法逆的纯 Python 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45442396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com