如何在Python中实现线性反馈移位寄存器

2024-06-28 10:47:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从任何人那里得到一些关于如何在Python中实现这个算法的信息:

“混淆数据的一种常用技术是使用异或(异或)和一些密钥;这种方法既便宜又对称。当它用于包含大量null的可移植可执行文件格式时,会出现一个问题,因为用您的键执行的异或操作最终会写出您的密钥。 一个稍微复杂一点的算法是实现一个线性反馈移位寄存器来生成一个与数据异或的密钥流。对于这个版本,您将使用8位移位寄存器。移位寄存器用一个值初始化,并逐步生成密钥流。在每一步之后,从移位寄存器读取下一个字节。在

步进寄存器:

  • 把所有的位都向右移一位。最左边的位变成0。在
  • 如果从寄存器移出的位是1,则用0x95对寄存器进行异或(例如,如果0101被移位并且 变成0010,执行xor) 例如,如果寄存器包含0x82,则单步执行将生成0x41。再次步进将产生0xB5。在

该功能应符合以下签名: 字符串LFSR(int dataLength,BYTE*data,unsigned char初始值) 示例测试: 资料图:“苹果” 键:0x61 结果:'\xC4\xB7\x86\x17\xCD' 数据:'\xC4\xB7\x86\x17\xCD'键:0x61 结果:“苹果”

我不确定如何开始这方面的工作,我的Python知识还处于初级水平。在


Tags: 数据方法苹果算法信息密钥寄存器技术
1条回答
网友
1楼 · 发布于 2024-06-28 10:47:24

在Python3中,bytes对象已经知道它的长度,因此不需要显式地将其传递到函数中

>>> def LFSR(data, iv):
...     for c in data:
...         lsb = 1 & iv       # save the rightmost bit
...         iv >>= 1           # shift
...         if lsb:
...             iv ^= 0x95
...         yield c ^ iv       # yield one byte
... 
>>> print(bytes(LFSR(b'apple', 0x61)))
b'\xc4\xb7\x86\x17\xcd'
>>> print(bytes(LFSR(b'\xc4\xb7\x86\x17\xcd', 0x61)))
b'apple'

这是一个生成器而不是函数,因为它使用yield而不是{}。我们可以说LFSR是一个整数的集合。在

如果你看字节的帮助

^{pr2}$

您可以看到我们使用的是第一个构造函数:bytes(iterable_of_ints)

相关问题 更多 >