问题标签 [galois-field]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
106 浏览

python - 如何在 Sage 中打印伽罗瓦域的所有加法和乘法

我的命令行有两个输入,一个素数 p 和一个正整数 n。我将它们以 GF(p^n) 的形式放在伽罗瓦域中。

我的目标是打印出该字段的所有元素、加法和乘法。

我可以打印出字段的元素,但是如何获得加法和乘法?如果 p 和 n 为 2,我希望它们是这样的:

到目前为止,这是我的代码:

0 投票
1 回答
648 浏览

ocaml - 如何执行伽罗瓦域乘法?

我正在实施 AES 加密。在混合列/反向混合列过程中,我需要进行伽罗瓦域乘法。我正在使用以下文档中的查找表(第 5.4.2 节) https://www.ime.usp.br/~rt/cranalysis/AESSimplified.pdf

如果转到上面指定的部分,L 表中的 (0,0) 列是空的。那么当我说我需要查找 L(0,0) 时我会返回什么。我试图返回 0,但这给了我错误的加密。

0 投票
3 回答
2778 浏览

python - 勘误表(擦除+错误)用于 Reed-Solomon 解码的 Berlekamp-Massey

我正在尝试在 Python 中实现一个 Reed-Solomon 编码器-解码器,支持对擦除和错误的解码,这让我发疯。

该实现目前支持仅解码错误或仅擦除,但不能同时解码两者(即使它低于 2*errors+erasures <= (nk) 的理论界限)。

从 Blahut 的论文(这里这里)看来,我们只需要用擦除定位多项式初始化错误定位多项式,就可以隐式计算 Berlekamp-Massey 内的勘误定位多项式。

这种方法部分适用于我:当我有 2*errors+erasures < (nk)/2 时它可以工作,但实际上在调试之后它才有效,因为 BM 计算了一个错误定位器多项式,它得到与擦除定位器多项式完全相同的值(因为我们低于仅错误校正的限制),因此它通过 galois 域被截断,我们最终得到了擦除定位多项式的正确值(至少我是这样理解的,我可能是错的)。

但是,当我们超过 (nk)/2 时,例如如果 n = 20 且 k = 11,则我们可以纠正 (nk)=9 个擦除符号,如果我们输入 5 个擦除,那么 BM 就会出错。如果我们输入 4 个擦除 + 1 个错误(我们仍然远低于界限,因为我们有 2*errors+erasures = 2+4 = 6 < 9),BM 仍然会出错。

我实现的 Berlekamp-Massey 的确切算法可以在这个演示文稿中找到(第 15-17 页),但是可以在此处此处找到非常相似的描述,在这里我附上数学描述的副本:

Berlekamp-Massey 算法

现在,我将这个数学算法几乎完全复制到了 Python 代码中。我想要扩展它以支持擦除,我尝试使用擦除定位器初始化错误定位器 sigma:

多项式和 GF256int 分别是 2^8 上的多项式和伽罗瓦域的通用实现。这些类是单元测试的,并且它们通常是错误证明的。Reed-Solomon 的其他编码/解码方法也是如此,例如 Forney 和 Chien 搜索。我在这里谈论的问题的快速测试用例的完整代码可以在这里找到:http ://codepad.org/l2Qi0y8o

这是一个示例输出:

在这里,擦除解码总是正确的,因为它根本不使用 BM 来计算擦除定位器。通常,其他两个测试用例应该输出相同的 sigma,但它们根本不会。

当您比较前两个测试用例时,问题来自 BM 的事实在这里是公然的:校正子和擦除定位器是相同的,但得到的 sigma 完全不同(在第二个测试中,使用了 BM,而在不调用仅擦除 BM 的第一个测试用例)。

非常感谢您对我如何调试它的任何帮助或任何想法。请注意,您的答案可以是数学或代码,但请解释我的方法出了什么问题。

/EDIT:仍然没有找到如何正确实现勘误表BM解码器(请参阅下面的答案)。赏金提供给任何可以解决问题(或至少引导我找到解决方案)的人。

/ EDIT2:愚蠢的我,对不起,我刚刚重新阅读了架构,发现我错过了作业中的更改L = r - L - erasures_count......我已经更新了代码来解决这个问题并重新接受了我的答案。

0 投票
2 回答
1896 浏览

matlab - 如何在 Matlab 中的 GF(2) 中执行逆运算并在 GF(256) 中进行乘法?

我有一个二进制矩阵 A(只有1和),以及伽罗瓦域中0的一个向量(256)。D向量C计算如下:

其中表示矩阵inA^^-1的逆矩阵,是乘法运算。结果向量必须在. 我试图在 Matlab 中做到这一点。AGF(2)*CGF(256)

但是,对于上面的代码,我无法达到我的预期结果

它产生一个错误

你能帮我达到我的预期结果吗?

0 投票
2 回答
418 浏览

field - GF(3) 上的高斯消元法

我正在尝试实现一种适用于 Galois Field(3) 的高斯算法。我已经成功地在 GF(2) 上实现了该算法,但 GF(3) 似乎有点棘手。我的主要问题是:当我选择的枢轴线的值为 2 (pl = 2) 时,如何消除列中的 2?我的第一个想法是将 pl/2 添加到 2,但在 GF(3) 中,我不确定 2/2 = 1。

0 投票
1 回答
410 浏览

c - 在 GF(256) 中乘以 14

我正在编写 AES Invert mixcolumns 操作,我需要在 GF(256) 中将数字乘以 14。这就是我想出的(p 是结果,q 是要乘以 14 的数字):

它有效,但我认为有一种更简单的方法可以做到这一点,但我似乎找不到它。我的主要问题是我进行了 6 次比较。

0 投票
2 回答
158 浏览

c - 如何将 UInt64 数组转换为 UInt16 数组以执行多精度乘法?

我需要在我的应用程序中执行快速的伽罗瓦域算术。我有一个用汇编语言编写的乘法函数,该函数已针对我的平台 MSP430 微控制器进行了优化。该函数计算两个任意大小的大数的乘积,但每个数字必须表示为一个 16 位整数数组。但是,在我的项目中,伽罗瓦域元素表示为 16 个 64 位整数的数组。如何将我的 16 个 64 位整数数组转换为优化的、基于汇编的乘法函数所需的表示(即 64 个 16 位整数数组)?当然,简单地将数组转换为 (UInt16 *) 是行不通的。

MSP430 是一种小端架构。在此先感谢您的任何建议。

0 投票
1 回答
1112 浏览

python - 错误'int'对象不可下标python

我正在学习 python 你能帮我解决这个 galois 字段 xor 的代码吗?

我得到这个错误

0 投票
1 回答
85 浏览

c - 从 C 到 Matlab 的伽罗瓦域算法

我正在从 Gallois 字段中乘以 2 为 Matlab 转录 C 代码,问题是我的 matlab 代码显示的值与 C 代码不同。显然一切都很好,我在 matlab 中注释了代码以识别代码下方的 C 代码的改编。

C:

输出:

MATLAB:

输出:

C 代码工作正常,我%d在 C 代码中打印以显示变量的整数值,因为在代码的开头进行了强制转换。

有人知道发生了什么

0 投票
1 回答
146 浏览

matlab - Matlab中的gfconv(伽罗瓦场函数)错误

我正在尝试AA使用 Matlab 的函数将 galois 字段中的十六进制值乘以 2 gfconv(a,b),控制台返回给我一个错误说:“输入元素必须是二进制的。”,但我的两个元素是二进制的

错误代码:

知道如何解决吗?