本文只提供实现方法,建议读者先自行了解相关知识,再阅读本文代码。
结果截图:
C++代码:
// LFSR.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <stdlib.h>
#include <bitset>
#define n 4
using namespace std;
string BitStrToStr(string bstr)
{
string str = "";
//每八位转化成十进制,然后将数字结果转化成字符
int sum;
for (int i = 0; i < bstr.size(); i += 8)
{
sum = 0;
for (int j = 0; j < 8; j++)
if (bstr[i + j] == '1')
sum = sum * 2 + 1;
else
sum = sum * 2;
str = str + char(sum);
}
return str;
}
int main()
{
bitset<n> bint(6);
bitset<n> str(bint);
string s1, s2;
/*for (int i = bint.size() - 1; i >= 0; i--)
cout << bint[i];*/
cout << "初始状态为:" << bint.to_string() << endl;
do {
s1 = bint.to_string();
s2.push_back(s1[3]);
int j = bint[n - 1] ^ bint[0];
bint.operator>>=(1);
bint[n - 1] = j;
} while (str.to_string() != bint.to_string());
cout << "输出序列为:" << s2 << endl;
string msg = "hello,world!";
string cip = "";
for (int i = 0; i < msg.size(); i++)
{
bitset<8> bits = bitset<8>(msg[i]);
string temp = bits.to_string();
cip = cip+temp;
}
cout << "明文:" << msg << endl;;
cout <<"明文二进制:" <<cip << endl;
int len = s2.length();
for (int i = 0; i < cip.size(); ++i) {
if (cip[i] != s2[i % len])
{
cip[i] = '1';
}
else
{
cip[i] = '0';
}
}
cout <<"密文二进制:"<< cip << endl;
//cout << "密文直译:" << BitStrToStr(cip)<<endl;
for (int i = 0; i < cip.size(); ++i) {
if (cip[i] != s2[i % len])
{
cip[i] = '1';
}
else
{
cip[i] = '0';
}
}
cout << "密文解译:" << BitStrToStr(cip);
return 0;
}