1. 理解线性反馈移位寄存器的基本构造,编程实现一个简单的线性反馈移位寄存器并用输出序列对给定明文实施逐比特加密。 联结多项式1: p(x) = 1 + x + x7 联结多项式2: q(x) = 1+x2 + x4 + x7 (1)分别画出上列两个联结多项式对应的LFSR结构图, (2)编程实现输出序列,并给出序列的周期, (3)将自己的姓名全拼和学号分别用上面两个输出序列进行加解密。
时间: 2024-02-06 19:12:11 浏览: 66
这是一道编程题目,需要使用编程语言实现线性反馈移位寄存器(LFSR)算法,并进行加解密操作。以下是 Python 代码示例:
```python
# 定义 LFSR 类
class LFSR:
def __init__(self, poly, seed):
self.poly = poly
self.state = seed
# 移位操作
def shift(self):
feedback = sum(int(self.state[i]) * int(self.poly[i]) for i in range(len(self.poly)))
self.state = self.state[1:] + str(feedback % 2)
# 生成随机比特序列
def generate(self, n):
result = ''
for i in range(n):
result += self.state[-1]
self.shift()
return result
# 定义加密函数
def encrypt(name, number, poly):
seed = name + number # 将姓名和学号组合成种子
lfsr = LFSR(poly, seed)
plaintext = 'hello'
ciphertext = ''
key = lfsr.generate(len(plaintext)) # 生成密钥
for i in range(len(plaintext)):
ciphertext += str((int(plaintext[i]) + int(key[i])) % 2) # 按位异或加密
return ciphertext, key
# 定义解密函数
def decrypt(ciphertext, key):
plaintext = ''
for i in range(len(ciphertext)):
plaintext += str((int(ciphertext[i]) + int(key[i])) % 2) # 按位异或解密
return plaintext
# 测试
name = 'zhangsan'
number = '123456'
poly1 = '10000011'
poly2 = '11001001'
# 加密
ciphertext1, key1 = encrypt(name, number, poly1)
ciphertext2, key2 = encrypt(name, number, poly2)
print('ciphertext1:', ciphertext1, 'key1:', key1)
print('ciphertext2:', ciphertext2, 'key2:', key2)
# 解密
plaintext1 = decrypt(ciphertext1, key1)
plaintext2 = decrypt(ciphertext2, key2)
print('plaintext1:', plaintext1)
print('plaintext2:', plaintext2)
```
在上述代码中,我们定义了一个 LFSR 类,包含了多项式和种子两个参数。在类中,我们定义了 shift 函数来执行移位操作,以及 generate 函数来生成随机比特序列。在加密和解密函数中,我们使用 LFSR 类来生成密钥,并对明文进行逐比特加密和解密。
在测试部分,我们使用了两个不同的多项式 poly1 和 poly2,分别对姓名和学号进行加密操作。最终输出了加密后的密文和密钥,以及解密后的明文。
阅读全文