0

我继承了一个 PHP 项目,该项目可以真正受益于前向纠错,因为它涉及(可能)用户键入无限可变长度的 base64 编码字符串。该字符串目前被分成 6 个字符的组,以便于人类转录,并在处理之前重新组合在一起,但由于将人类引入方程式,错误仍然可能并且确实会发生。

短字符串或复制粘贴的字符串通常都可以。手动输入冗长的异常值才是真正受益的地方。

我已经确定 Reed Solomon 是最有可能实现这一目标的候选人(但我很高兴被那些有更多实践经验的人指出更合适的 FEC)。

有人知道我可以在这个 PHP 应用程序中使用的开源 RS 编码器和解码器吗?我发现了几个我可能可以从 QRCode 库中破解的编码器,但解码器似乎是神话般的。我当然可以选择采用几个 C 实现并重新编写它们(我是程序员而不是数学专家,所以从头开始编写一个可能超出我的能力)。

目前的数据看起来像这样(仅表示,可能不是有效的 base64!):

fD48Sa 483CDf 18ACDx UYh5jS PQXNT

我想在分割后对每个块应用 RS 编码(延长每个块,我接受这一点,从项目的角度来看这是可以接受的),或者在字符串被分割成 6 个块之前应用它.根据我对RS的理解,这将是更复杂的选项,因为字符串不是固定长度。

在提出 FEC 想法的“尤里卡”时刻之后,我希望能够找到能够让我做到这一点的东西:

// messy encode pseudocode for demonstration purposes
$data    = "Once upon a time in a land far far away";
$encoded = base64_encode($data);
$split   = chunk_split($encoded, 6, ' ');

foreach($split as $chunk) {
    $rsEncoded .= rsEncode($chunk) . " ";
}

然后在输入时执行类似的 rsDecode() 。

任何提示表示赞赏...

4

1 回答 1

0

我可能误解了您的问题,但这听起来不像是前向纠错的好用例。

当在编码发生时知道消息是正确的时,前向纠错很有用。在这一点之后引入的错误可以在解码过程中被克服。但是,从您描述的工作流程来看,您似乎想在用户输入消息后对其进行编码,这为时已晚,无法检测到其转录中的任何错误。

您可能实际上是在描述接收 Reed Solomon 代码块,让用户输入他们的数据,并使用接收到的代码块中的校验符号来分析他们的数据。如果输入的数据和接收的代码块之间不同的符号数量小于 RS 代码的单例界限,这确实允许您“更正”用户对您首先收到的消息的输入。不过,我不确定为什么这会有用。


也就是说,我相信在 PHP 中启动和运行 RS 的最简单方法是从 PHP 代码中调用 Python 实现。

Wikiversity 在这里有一个非常有据可查的 Python 编码器/解码器,并且这里有一个相同实现的进一步通用版本。最近在编写我自己的 C++ 实现时,我发现这两个资源都非常有用。

于 2016-09-19T19:57:00.247 回答