理解线性反馈移位寄存器的基本构造,编程实现一个简单的线性反馈移位寄存器并用输出序列对给定明文实施逐比特加密c++
时间: 2023-12-10 22:41:57 浏览: 104
线性反馈移位寄存器(Linear Feedback Shift Register,LFSR)是一种基于移位寄存器的伪随机序列发生器。它的基本构造是一个移位寄存器和一个反馈电路,反馈电路将寄存器中某些位置的值进行异或运算,并将结果作为新的输入位。LFSR 的输出序列具有伪随机性质,可以用于加密通信等领域。
以下是一个简单的 LFSR 实现,并用输出序列对给定明文逐比特加密的 C++ 代码示例:
```cpp
#include <iostream>
using namespace std;
class LFSR {
private:
int *reg; // 寄存器
int len; // 寄存器长度
int *feedback; // 反馈电路
public:
LFSR(int len, int *feedback) {
this->len = len;
this->feedback = feedback;
reg = new int[len];
for (int i = 0; i < len; i++) {
reg[i] = 0;
}
}
int shift() {
int out = reg[0];
for (int i = 0; i < len - 1; i++) {
reg[i] = reg[i+1];
}
int feedback_out = 0;
for (int i = 0; i < len; i++) {
feedback_out ^= reg[i] * feedback[i];
}
reg[len-1] = feedback_out;
return out;
}
~LFSR() {
delete[] reg;
}
};
int main() {
// 初始化 LFSR
int feedback[] = {1, 0, 0, 1, 1}; // 反馈电路
LFSR lfsr(5, feedback);
// 给定明文
int plain[] = {0, 1, 0, 1, 1};
int len = sizeof(plain) / sizeof(int);
// 逐比特加密
for (int i = 0; i < len; i++) {
int key_bit = lfsr.shift();
int cipher_bit = plain[i] ^ key_bit;
cout << cipher_bit << " ";
}
return 0;
}
```
在这个示例中,我们初始化了一个 5 位的 LFSR,它的反馈电路为 [1, 0, 0, 1, 1],并给定了一个明文 [0, 1, 0, 1, 1]。然后我们逐比特地加密明文,即每次通过 LFSR 生成一个密钥比特,并将它和明文比特异或运算得到密文比特。最终输出的密文序列为 [1, 1, 0, 0, 0]。
阅读全文