当前位置:文档之家› 现代密码学实验(题目代码).doc

现代密码学实验(题目代码).doc

****大学
学生实验报告
实验课程名称现代密码学
学院** 年级** 专业班*********
学生姓名******* 学号********
开课时间200- 至200- 学年第二学期
(2)仿射变换加/解密程序对一段较长的英文文章进行加密
下面是文本内容:
实验项目
名称
实验二、流密码(认识LFSR及流
密码)
成绩
一、实验目的
通过实现简单的线性反馈移位寄存器(LFSR),理解LFSR的工作原理、本原多项式重要意义。

二、实验内容
1)利用C\C++语言实现LFSR(其中LFSR已给定);2)通过不同初始状态生成相应的序列,并观察他们的周期有什么特点;3)利用生成的序列对文本进行加/解密(按对应位作模2加运算)。

其中的LFSR为:
三、实验步骤
#include<iostream>
#include<vector>
#include<cmath>
#include<fstream>
using namespace std;
void main()
{
///下面是密钥的产生/////////////
int a[31]={1,1,0,0,1};
for(int k=5;k<31;++k)
a[k]=(a[k-2]+a[k-5])%2;
cout<<"密钥如下:"<<endl;
for(int jj=0;jj<31;++jj)
cout<<a[jj]<<' ';
else
i=i+8;
s.push_back((int(c))^sum);
}
for(int kk=0;kk<s.size();++kk) {
out<<char(s[kk]);
}
}
////////////
}
else
cout<<"操作无效!"<<endl;
}
四、实验结果及分析
在“in.txt”中输入如下内容:
实验结果如下:
得到密文“out.txt”如下:
for(int j=0;cypher[j]!='\0';j++)
{
cyph[j]=cypher[j]^b[j];
cout<<cyph[j];
}
cout<<endl;
for(int k=0;k<j;k++)
{
cypher[k]=cyph[k]^b[k];
cout<<cypher[k];
}
cout<<endl;
}
int main(int argc, char* argv[])
{
unsigned char buf[10],buf1[10],buf2[10],b[100],c[100];
// 函数f 初始状态152
lfsr_output_byte(5,(unsigned char)144,(unsigned char)152, buf, 10);
lfsr_output_byte(5,(unsigned char)44,(unsigned char)152, buf1, 10);
lfsr_output_byte(5,(unsigned char)24,(unsigned char)152, buf2, 10);
Geffe(buf,buf1,buf2,b);
c[0]=0;
JK(buf,buf1,c);
cout<<endl;
cout<<"Geffe operate:"<<endl;
cypt(b);
cout<<endl;
cout<<"J-K operate:"<<endl;
cypt(c);
return 0;
}
四、实验结果及分析
if(pDest == NULL)
{
break;
}
else
{
int iPos = (int)(pDest - szLast7Chars + 1);
if(iPos != 7 - i)
{
break;
}
else
{
szLast7Chars[6-i]='\0';
continue;
}
}
}
memcpy(szFPlaintextAnyLength + strlen(szFPlaintextAnyLength) - 7,szLast7Chars,7); }
#include <stdio.h>
#include "yxyDES.h"
int main()
{
yxyDES* my_des = new yxyDES();
char temp[32] = {0};
my_des->InitializeKey("12345678");
printf("key is : 12345678 \n");
my_des->EncryptAnyLength("yxyDES_test");
printf("set plaintext : yxyDES_test \n");
printf("after encrypt : %s \n",my_des->GetCiphertextAnyLength());
printf("now,decrypting...\n");
string test_ciphertext = my_des->GetCiphertextAnyLength();
my_des->DecryptAnyLength(test_ciphertext);
printf("after decrypt : %s \n",my_des->GetPlaintextAnyLength());
return 0;
}
四、实验结果及分析
a[i]=quickindex1(c[i],e,n);
cout<<a[i]<<" ";
}
cout<<endl<<"解密:";
//解密过程
for(int j=0;a[j]!='\0';j++)
{
b[j]=quickindex1(a[j],d,n);
cout<<b[j]<<" ";
}
cout<<endl;
}
四、实验结果及分析。

相关主题