问题标签 [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.
python - 如何在 Sage 中打印伽罗瓦域的所有加法和乘法
我的命令行有两个输入,一个素数 p 和一个正整数 n。我将它们以 GF(p^n) 的形式放在伽罗瓦域中。
我的目标是打印出该字段的所有元素、加法和乘法。
我可以打印出字段的元素,但是如何获得加法和乘法?如果 p 和 n 为 2,我希望它们是这样的:
到目前为止,这是我的代码:
ocaml - 如何执行伽罗瓦域乘法?
我正在实施 AES 加密。在混合列/反向混合列过程中,我需要进行伽罗瓦域乘法。我正在使用以下文档中的查找表(第 5.4.2 节) https://www.ime.usp.br/~rt/cranalysis/AESSimplified.pdf
如果转到上面指定的部分,L 表中的 (0,0) 列是空的。那么当我说我需要查找 L(0,0) 时我会返回什么。我试图返回 0,但这给了我错误的加密。
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 页),但是可以在此处和此处找到非常相似的描述,在这里我附上数学描述的副本:
现在,我将这个数学算法几乎完全复制到了 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
......我已经更新了代码来解决这个问题并重新接受了我的答案。
matlab - 如何在 Matlab 中的 GF(2) 中执行逆运算并在 GF(256) 中进行乘法?
我有一个二进制矩阵 A
(只有1
和),以及伽罗瓦域中0
的一个向量(256)。D
向量C
计算如下:
其中表示矩阵inA^^-1
的逆矩阵,是乘法运算。结果向量必须在. 我试图在 Matlab 中做到这一点。A
GF(2)
*
C
GF(256)
但是,对于上面的代码,我无法达到我的预期结果
它产生一个错误
你能帮我达到我的预期结果吗?
field - GF(3) 上的高斯消元法
我正在尝试实现一种适用于 Galois Field(3) 的高斯算法。我已经成功地在 GF(2) 上实现了该算法,但 GF(3) 似乎有点棘手。我的主要问题是:当我选择的枢轴线的值为 2 (pl = 2) 时,如何消除列中的 2?我的第一个想法是将 pl/2 添加到 2,但在 GF(3) 中,我不确定 2/2 = 1。
c - 在 GF(256) 中乘以 14
我正在编写 AES Invert mixcolumns 操作,我需要在 GF(256) 中将数字乘以 14。这就是我想出的(p 是结果,q 是要乘以 14 的数字):
它有效,但我认为有一种更简单的方法可以做到这一点,但我似乎找不到它。我的主要问题是我进行了 6 次比较。
c - 如何将 UInt64 数组转换为 UInt16 数组以执行多精度乘法?
我需要在我的应用程序中执行快速的伽罗瓦域算术。我有一个用汇编语言编写的乘法函数,该函数已针对我的平台 MSP430 微控制器进行了优化。该函数计算两个任意大小的大数的乘积,但每个数字必须表示为一个 16 位整数数组。但是,在我的项目中,伽罗瓦域元素表示为 16 个 64 位整数的数组。如何将我的 16 个 64 位整数数组转换为优化的、基于汇编的乘法函数所需的表示(即 64 个 16 位整数数组)?当然,简单地将数组转换为 (UInt16 *) 是行不通的。
MSP430 是一种小端架构。在此先感谢您的任何建议。
python - 错误'int'对象不可下标python
我正在学习 python 你能帮我解决这个 galois 字段 xor 的代码吗?
我得到这个错误
c - 从 C 到 Matlab 的伽罗瓦域算法
我正在从 Gallois 字段中乘以 2 为 Matlab 转录 C 代码,问题是我的 matlab 代码显示的值与 C 代码不同。显然一切都很好,我在 matlab 中注释了代码以识别代码下方的 C 代码的改编。
C:
输出:
MATLAB:
输出:
C 代码工作正常,我%d
在 C 代码中打印以显示变量的整数值,因为在代码的开头进行了强制转换。
有人知道发生了什么
matlab - Matlab中的gfconv(伽罗瓦场函数)错误
我正在尝试AA
使用 Matlab 的函数将 galois 字段中的十六进制值乘以 2 gfconv(a,b)
,控制台返回给我一个错误说:“输入元素必须是二进制的。”,但我的两个元素是二进制的
错误代码:
知道如何解决吗?