91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 3KB
    文件類型: .cpp
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-29
  • 語言: C/C++
  • 標簽: 密碼學??

資源簡介

1)利用C\C++語言實現給定的LFSR;
2)通過不同初始狀態生成相應的序列,并觀察它們的周期有什么特點;
3)利用生成的序列對文本進行加/解密(按對應位作模2加運算)。
步驟:
(1)生成序列:使用#include庫構造序列,使用bint.to_string()將輸入的01串轉成字符串,用str暫存。將bint[3]和bint[0]異或,賦值給bint[4]也就是a5,循環左移,將bint轉成字符串后s1[4]就是生成的a1,將 a1添加到s2后面。當str與現在的bint相同,即周期結束,跳出循環,s2就是生成的完整序列。
(2)加密過程:生成31位序列后,讀取待加密文本的每一個字符,和0XFF相與得到8位01串,依次與31位序列按位異或,結果得到8位01串,得到密文,寫入ciphertext.txt。
(3)解密過程:每次讀入ciphertext.txt中的8個01字符,將其再依次與31位序列按位異或,得到加密前的01串,根據這個01字符串,先轉成bitset類型,再轉成char型,將每個字母寫入解密文件deciphertext.txt,解密結束。

資源截圖

代碼片段和文件信息

#include
#include
#include
#include
#include
#include?
#define?n?5
using?namespace?std;

int?main()
{
system(“title?=?LFSR“);
bitset?bint;
????cout?<????cin?>>?bint;
string?s1s2; //s1是bint轉化后的字符串,s2是生成的01序列?
string?str?=?bint.to_string(); //bint轉成01字符串?
cout?<
do
{
int?j?=?bint[3]?^?bint[0]; //a1和a4異或
//轉化為字符串s1
s1?=?bint.to_string();
//s1[4]是a1,將a1作為輸出序列給s2
s2.push_back(s1[4]);
bint.operator>>=(1);//循環左移一位
//異或的結果給a5
bint[n?-?1]?=?j;
cout?< }while?(str?!=?bint.to_string());
cout?</*------------------------------------------------------------*/
//加密過程
fstream?plain;
fstream?enc(“ciphertext.txt“);
fstream?dec(“deciphertext.txt“);
plain.open(“plaintext.txt“ios::in);
char?chch2=0;
string?tmp;
int?mp?=?0;
if(!plain)
{
cout<<“原始文件打開失敗!“< exit(0);?
}
cout<<“原始文件打開成功!“< cout<<“下面開始讀取文件!\n“;
plain.get(ch);
cout<<“ch:“<
int?j?=?0;
bool?tt2; //t獲取s2[j%31]的字符,將其轉成布爾類型,t2記錄m?&?(0x80),也就是m的最高位
while(!plain.eof())
{
//將ch轉成8位01串m,依次將m的每一位與序列的一位相與,結果加到tmp中
m?=?ch?&?0xFF;
for(int?i?=?0;i? {
if(s2[j%31]?==?‘1‘) //t暫存即將作為密鑰異或的數字?
{
t?=?1;
}
els

評論

共有 條評論