线性反馈移位寄存器有哪些优点?
时间: 2023-12-13 18:20:58 浏览: 141
线性反馈移位寄存器(Linear Feedback Shift Register,LFSR)有以下优点:
1. 高效性:LFSR是一种硬件实现的伪随机数生成器,可以以非常高的速度生成随机数序列,比软件实现的随机数生成器更高效。
2. 简单性:LFSR的硬件实现非常简单,只需要少量的逻辑门和寄存器即可实现。
3. 可控性:通过调整LFSR的寄存器长度和反馈系数,可以控制生成的随机数序列的周期长度和随机性质。
4. 可重复性:由于LFSR的生成算法是确定性的,因此可以通过保存初始状态和生成规则,实现随时重复生成相同的随机数序列。
5. 安全性:LFSR可以用于加密算法中,用于生成密钥流。在密码学中,LFSR被广泛应用于流密码、序列密码和伪随机数生成器中。
相关问题
理解线性反馈移位寄存器的基本构造,编程实现一个简单的线性反馈移位寄存器并用输出序列对给定明文实施逐比特加密
线性反馈移位寄存器(Linear Feedback Shift Register,LFSR)是一种简单的序列发生器,常用于加密算法中。它的基本构造是由若干个触发器和一些异或门构成的,其中一个触发器的输出作为反馈信号,控制序列的产生。
下面是一个简单的 4 位线性反馈移位寄存器的实现:
```python
class LFSR:
def __init__(self, taps, seed):
self.taps = taps
self.state = seed
def shift(self):
feedback = sum([self.state[i] for i in self.taps]) % 2
new_bit = self.state.pop(0)
self.state.append(feedback)
self.state.append(new_bit)
return new_bit
def generate(self, n):
output = []
for i in range(n):
output.append(self.shift())
return output
```
其中,`taps` 是一个数组,表示反馈信号从哪些触发器的输出异或而来;`seed` 是一个长度为 4 的数组,表示初始状态。`shift` 方法实现了一次移位操作,并返回新的输出;`generate` 方法生成给定长度的输出序列。
现在,我们可以用这个 LFSR 实现一个简单的逐比特加密算法。假设明文是一个长度为 8 的二进制字符串,我们可以先将其转换成一个数组,然后将每个比特与 LFSR 的输出异或,得到密文。具体实现如下:
```python
def encrypt(plaintext, lfsr):
plaintext = [int(c) for c in plaintext]
ciphertext = []
for bit in plaintext:
key = lfsr.shift()
ciphertext.append(bit ^ key)
return ''.join([str(c) for c in ciphertext])
```
其中,`lfsr` 是一个 LFSR 对象。对于明文的每个比特,我们都执行一次 LFSR 的移位操作,并将其输出与明文比特异或,得到密文比特。最后将密文比特组成一个二进制字符串,返回即可。
下面是一个完整的示例程序,演示了如何使用 LFSR 对明文进行逐比特加密:
```python
class LFSR:
def __init__(self, taps, seed):
self.taps = taps
self.state = seed
def shift(self):
feedback = sum([self.state[i] for i in self.taps]) % 2
new_bit = self.state.pop(0)
self.state.append(feedback)
self.state.append(new_bit)
return new_bit
def generate(self, n):
output = []
for i in range(n):
output.append(self.shift())
return output
def encrypt(plaintext, lfsr):
plaintext = [int(c) for c in plaintext]
ciphertext = []
for bit in plaintext:
key = lfsr.shift()
ciphertext.append(bit ^ key)
return ''.join([str(c) for c in ciphertext])
if __name__ == '__main__':
taps = [0, 1]
seed = [1, 0, 1, 1]
lfsr = LFSR(taps, seed)
plaintext = '11010011'
ciphertext = encrypt(plaintext, lfsr)
print('Plaintext: ', plaintext)
print('Ciphertext:', ciphertext)
```
输出:
```
Plaintext: 11010011
Ciphertext:01111101
```
可以看到,明文 `11010011` 被加密成了密文 `01111101`。
五、已知某线性反馈移位寄存器的反馈函数对应的特征多项式是p(x)=x4+x+1,求: (1)该线性反馈移位寄存器的线性递推式和结构图; (2)设初始状态是(a1,a2,a3,a4)=(1,0,0,0),求此线性反馈移位寄存器产生的序列及其周期。
(1)该线性反馈移位寄存器的线性递推式可以通过特征多项式求解,特征多项式为:
p(x) = x^4 + x + 1
将其分解为两个因式:
p(x) = (x^2 + x + 1)(x^2 + x + 1)
因此,该线性反馈移位寄存器的线性递推式为:
an = an-2 + an-3 + bn-4
其中,bn = an-4。
该线性反馈移位寄存器的结构图如下:
```
+--⊕--(+)--⊕--(+)--⊕--(+)--⊕--+
| | | | |
| ↓ ↓ ↓ |
a1-->|1/z|-->|z|-->|z|-->|z|-->|z|-->a4-->
| ↑ ↑ ↑ |
| | | | |
+-----+-----+-----+-----------+
```
其中,1/z 表示取反操作,⊕ 表示异或操作。
(2)设初始状态是 (a1, a2, a3, a4) = (1, 0, 0, 0),则按照线性递推式可以得到以下序列:
1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, ...
可以发现,该序列的周期为 6。因此,该线性反馈移位寄存器产生的序列为:
1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, ...
阅读全文