为什么我的方程式无法正确评估?

问题描述 投票:0回答:1

因此,我正在为Python中的uni项目制作BCH解码器。它需要一个10位的代码字,无论有无错误,都应该检测并更正发现的任何错误。对于双重错误纠正,有一个数学公式可以检测这些错误的位置和大小:formula for error pos and mag

i = (-Q + ((Q^2-4*P*R)^(1/2))/2*P)<br/>
j = (-Q - ((Q^2-4*P*R)^(1/2))/2*P)

b = (i*s1-s2)/(i-j)<br/>
a = s1-b

我已经正确计算了QPR和s1,s2。因此,我正在使用此示例(2 error BCH example)进行调试。它具有要传送到8888880747的数字8899880747,因此在位置3和4上都由于1的小节而出现2错误。到目前为止,我的程序生成了正确的syndromes(s1 to s4 - 2,7,3,3)和正确的PQR值(10,7,10)但是当对i和j进行计算时,我得到的值与示例中的值不同-10.710.6,而不是34。这是我为i和j编写的代码:

#work out error positions i and j
sqrt = ((Q**2 - 4*P*R) % 11)**(1/2)
i = (((-Q+sqrt)/(2*P))%11)
j = (((-Q-sqrt)/(2*P))%11)

谁能看到我在做什么错?谢谢。

python math cryptography algebra
1个回答
0
投票

[该运算应在GF(11)中进行,换言之,它们应在模11中进行。平方根和除法模11与它们的实数不同。

[]有一些先进的算法可以进行平方根运算和模逆运算,但是对于小至11的数字,您可以使用蛮力或预先计算表格。在这里遵循首要原则。对于sqrt(x),请尝试[0,1,2,... 10]并查看平方的哪个等于x。那是平方根。对于除法(倒数)1 / x,请尝试[0,1,2,... 10],然后看看乘以x的哪一个等于1 mod11。现在我们将这些值插入以获得i = 3,j = 4。

因此,通过计算mod 11,我们得到:

P,Q,R =(10,7,10)(Q ** 2-4-* P * R)= -351,-351%11 = 1这很方便,因为1的平方根仅为1 mod 11。查看下面的两个方程,我们将需要计算1 /(2 * P)mod 11,换句话说,我们需要找到2 * P mod 11的逆,即(2P)-1] > mod 11。2 * P%11 = 20%11 =9。通过尝试所有可能性,我们发现9 -1 mod 11为5。

© www.soinside.com 2019 - 2024. All rights reserved.