首页 > 编程知识 正文

线性移位寄存器序列密码

时间:2023-05-06 00:07:53 阅读:242137 作者:1825

本文只提供实现方法,建议读者先自行了解相关知识,再阅读本文代码。
结果截图:
C++代码:

// LFSR.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include <stdlib.h>#include <bitset>#define n 4using 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;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。