标签: lfsr

LFSR实现中的高效比特

虽然我有一个很好的LSFR C实现,我想我会在Haskell中尝试相同 - 只是为了看看它是怎么回事.到目前为止,我想出的是比C实现慢两个数量级,这引出了一个问题:性能如何得到改善?显而易见,这个小小的操作是瓶颈,而分析器确认了这一点.

这是使用列表的基线Haskell代码,并且Data.Bits:

import           Control.Monad      (when)
import           Data.Bits          (Bits, shift, testBit, xor, (.&.), (.|.))
import           System.Environment (getArgs)
import           System.Exit        (exitFailure, exitSuccess)

tap :: [[Int]]
tap = [
    [],            [],            [],            [3, 2],
    [4, 3],        [5, 3],        [6, 5],        [7, 6],
    [8, 6, 5, 4],  [9, 5],        [10, 7],       [11, 9],
    [12, 6, 4, 1], [13, 4, 3, 1], [14, 5, 3, 1], [15, 14],
    [16,15,13,4],  [17, 14],      [18, 11],      [19, 6, 2, 1],
    [20, …
Run Code Online (Sandbox Code Playgroud)

haskell bit-manipulation bit-fields lfsr

6
推荐指数
2
解决办法
284
查看次数

线性反馈移位寄存器解释

我想使用线性反馈移位寄存器来混淆字符串,所以我试图理解下面的wiki代码 在下面的线性反馈移位寄存器的wiki示例中,“ 0xACE1u ”是用作起始状态的十六进制值,但我不明白这个0xB400u是什么?

有人可以解释一下那是什么吗?任何解释如何使用 LFSR 来混淆字符串的链接将不胜感激

int main(void)
{
    uint16_t start_state = 0xACE1u;  /* Any nonzero start state will work. */
    uint16_t lfsr = start_state;
    unsigned period = 0;

    do
    {
        unsigned lsb = lfsr & 1;   /* Get LSB (i.e., the output bit). */
        lfsr >>= 1;                /* Shift register */
        if (lsb) {                 /* If the output bit is 1, apply toggle mask. */
            lfsr ^= 0xB400u;
        }
        ++period;
    } while (lfsr != …
Run Code Online (Sandbox Code Playgroud)

c obfuscation encoding lfsr

1
推荐指数
1
解决办法
6895
查看次数

标签 统计

lfsr ×2

bit-fields ×1

bit-manipulation ×1

c ×1

encoding ×1

haskell ×1

obfuscation ×1