问题标签 [lfsr]
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.
haskell - LFSR 实现中的高效位摆弄
虽然我有一个很好的 LSFR C 实现,但我想我会在 Haskell 中尝试同样的方法——只是为了看看它是如何进行的。到目前为止,我想出的比 C 实现慢两个数量级,这就引出了一个问题:如何提高性能?显然,位摆弄操作是瓶颈,分析器证实了这一点。
这是使用列表和的基线 Haskell 代码Data.Bits
:
基本上,它测试为任何给定位长度定义的LSFRtap :: [[Int]]
是否具有最大长度。(更准确地说,它只是检查 LSFR 在 2 n次迭代后是否达到初始状态(零) 。)
根据分析器,最昂贵的线路是反馈位d0 = xor' $ map (testBit lfsr) tap'
。
到目前为止我已经尝试过:
- use
Data.Array
: 尝试放弃,因为没有 foldl/r - 使用
Data.Vector
:比基线略快
我使用的编译器选项是:-O2
, LTS Haskell 8.12 (GHC-8.0.2)
.
参考 C++ 程序可以在gist.github.com上找到。
不能期望 Haskell 代码(?)运行得和 C 代码一样快,但是两个数量级太多了,必须有更好的方法来做位摆弄。
更新:应用答案中建议的优化的结果
- 输入为 28 的参考 C++ 程序,使用 LLVM 8.0.0 编译,在我的机器上运行 0.67 秒(与 clang 3.7 相同,稍慢,0.68 秒)
- 基线 Haskell 代码运行速度慢约 100 倍(由于空间效率低下,请勿尝试使用大于 25 的输入)
- 随着@Thomas M. DuBuisson的重写,仍然使用默认的 GHC 后端,执行时间下降到 5.2s
- 随着@Thomas M. DuBuisson的重写,现在使用 LLVM 后端(GHC 选项
-O2 -fllvm
),执行时间下降到 1.7 秒- 使用 GHC 选项
-O2 -fllvm -optlc -mcpu=native
将这个时间缩短到 0.73 秒
- 使用 GHC 选项
- 当使用 Thomas 的代码(使用默认的“本机”后端和 LLVM)时,替换
iterate
为iterate'
@cirdec 没有任何区别。但是,使用基线代码时确实会有所不同。
所以,我们已经从 100x 到 8x 再到 1.09x,即仅比 C 慢 9%!
注意
GHC 8.0.2 的 LLVM 后端需要 LLVM 3.7。在 Mac OS X 上,这意味着使用brew
和符号链接安装此版本。见7.10。GHC 后端。opt
llc
vhdl - VHDL 实现 LFSR
我在下面写了 Vhdl 代码和测试台代码,用于在 ISE 上实现 LFSR。我从 ISE 上的这条路径获取 LFSR 代码。语言模板--VHDL--综合构造--编码示例--计数器--LFSR
我的问题出在 simulink(isim) 中,我总是面对 out_lfsr 的“U”符号。你能帮我吗?
vhdl 代码:
试验台:
bit-manipulation - 使用 CRC 样式符号按位计算 LFSR 序列
我的问题源于观察到我们可以使用线性反馈移位寄存器来执行 CRC 检查。在代数上,这通常是以下形式;
S(x) = M(x) * x^k % G(x) (给出余数,对于 k 阶的 G(x))
这个问题的实现显示在这个问题中,(并且寄存器都被初始化为零)并且异或除法的数学按位计算显示在这个问题中。
我理解这两个 - 但是,我也知道使用 LFSR 的另一种常见方法是没有输入,而是用非零值预加载寄存器,然后运行(以零作为输入)以形成一个序列伪随机数。如下图所示
我的问题是,正如 CRC 可以按位和代数表示为模 2 除法一样,在给定生成器多项式和初始值的情况下,我们可以对 LFSR 序列生成器做同样的事情吗?如果是这样,一个例子会很棒!
非常感谢,如果我误解或误解了一个概念,请随时纠正我!
javascript - SHA-3 的所有循环常数究竟是如何生成的?
我似乎无法获得可以为 SHA-3 生成所有循环常量的确切算法。
描述可以在这里找到:
crypto.stackexchange.com/questions/6444。
这些值可以在github.com/Caligatio/jsSHA/blob/master/src/sha_dev.js#L1450找到:
或在github.com/emn178/js-sha3/blob/master/src/sha3.js#L24(另一种形式):
我访问了keccak.noekeon.org以阅读 Keccak 参考资料。我已阅读可下载的“Keccak 参考文件”中的所有文件。但我仍然无法理解所有这些常量的来源。我以预先计算的形式看到它们,但是用于生成它们的实际算法的描述在哪里?
例如,考虑以下来源:
android.googlesource.com/.../bouncycastle/crypto/digests/KeccakDigest.java;
read.pudn.com/.../KeccakPermutationReference.c__.htm ;
www.grepcode.com/file/.../bouncycastle/crypto/digests/SHA3Digest.java。
我尝试将上述来源中看似相关的代码转换为JS:
但它显然不会产生任何东西(所有值都设置为零)。
任何人都可以提供如何生成这些常量的可读伪代码或 Javascript 版本吗?
c - 线性反馈移位寄存器说明
我想使用线性反馈移位寄存器来混淆一个字符串,所以我试图理解下面的wiki代码 在下面的线性反馈移位寄存器的wiki示例中,' 0xACE1u '是用作起始状态的十六进制值,但我不明白这是什么0xB400u?
有人可以解释那是什么吗?以及任何解释如何使用 LFSR 来混淆字符串的链接将不胜感激
c - 在 C 中写入未格式化的直接访问二进制文件
我正在尝试使用这个顽固的 repo 来测试数字流的随机性(https://github.com/reubenhwk/diehard)。它为它读取的文件类型提供了这些细节:
然后命令 diehard 将提示输入要测试的文件的名称。
该文件必须是 10 到 1200 万字节的 form="unformatted",access="direct" 二进制文件。
这些是特定于 fortran 的文件约定,不是吗?问题是,我正在使用 lfsr-generator 生成我的随机二进制流,这是在 C 语言中。我尝试fputc
将二进制流写入文本文件或.bin
文件,但顽固分子似乎不接受它。
我没有使用fortran的经验。有没有办法使用 C 创建这种文件类型?我是否只需要硬着头皮让 C 调用创建文件的 fortran 子例程?这是我的C代码供参考:
python - 在 Python 中读取 .bin 或 .dat 文件
我正在生成一个二进制文件。我使用 hexdump 打开它,如下所示 在此处输入图像描述
但是当我尝试在 python 中读取这个文件时
file = open("lfsr.bin","rb")
data = file.read(10)
print data
它打印空白/空但如果我这样做
它打印
如何以 1023 块读取此文件?该文件实际上是 PRN 生成器代码的 o/p。
c - 错误杂散\ 327 C代码未编译
来自应用密码学书籍的这段 c 代码将无法编译
并且没有明显的错误
cryptography - 对于 nbit LFSR(特别是伽罗瓦算法),唯一 32 字节密钥的最大数量只能是 255 是否正确?
事实上,当我试图更好地理解整个主题时,我有不止一个问题。对于 CTF 挑战,我目前正在阅读 LSFR。挑战提供的代码作为示例是一个 5 位 lsfr,它从其位序列生成一个 32 字节长的密钥(8 位到一个字节,这 32 次)。因此,对于这个特定的 5 位情况,密钥的第一个和最后一个字节是相同的,因为在 2^5-1 次迭代之后,整个序列重复。此外,如果我正确理解 LSFR 背后的整个逻辑,我只能为 5 位版本生成 2^5-1 个唯一键。(从一个特定的种子开始,例如 s=1)。我也可以有 2^5 个不同的初始种子。根据我的测试,这不会产生额外的 31 个唯一的 32 字节密钥,而只会产生相同的密钥,但顺序不同。好的,所以这里有我的问题。
a) 上述陈述是否正确或我遗漏了什么?
b) 如果以上是正确的,那么如果至少使用 8bit_lsfr (2^8-1),我最多可以获得 255 个唯一键。正确的 ?
c) 即使我增加 lsfr 的位,我也将始终获得最多 255 个唯一键,因为我只能有 255 个唯一字节并且字节序列会重复。那是对的吗 ?
d)因此将位数增加到 8 位以上是没有意义的,或者对于我看不到的这种特殊情况还有其他好处吗?
感谢您提前更好地理解这一点的任何帮助。最好的 Zaphoxx