东北大学信息安全作业培训讲学
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//将比第一个小的移到低端
while(first < last && ch[first] <= key)
{
++first;
}
ch[last] = ch[first];
//将比第一个大的移到高端
}
ch[first] = key; //枢轴记录到位
Qsort(ch, low, first-1);
Qsort(ch, first+1, high);
}
else
printf("%d和%d不互素,最大公约数为:%d\n",x,y,z);
return 0;
}
(2)编程实现换位密码;
#include<iostream>
#include<string>
using namespace std;
char ch[30];
char ch1[30];
int x;
int len(char *ch)
x3 = ( f>=d )?f:d;
y3 = ( f>=d )?d:f;
while( 1 )
{
if ( y3 == 0 ) {
*result = x3; //两个数不互素则result为两个数的最大公约数,此时返回值为零
return 0; }
if ( y3 == 1 ) {
*result = y2; //两个数互素则resutl为其乘法逆元,此时返回值为1
东北大学信息安全作业
作业(一)
(1).编程实现双轨加密
#include<iostream>
#include<string>
using namespace std;
char ch1[30];
char ch2[30];
int i;
string shuanggui(char *ch)
{
int j=0,k=0;
j++;
}
ch1[i+1]='\0';
i=0;j=0;
while(ch1[i]!='\0') //生成二维字符数组
{
ch3[i/N][i%N]=ch1[i];
i++;
}
for(int l=0;l<=N;l++)
{
ch4[l]=ch2[l];
}
Qsort(ch2,0,N-1);
cout<<"钥控加密后:"<<endl;
return 1; }
q = x3/y3;
t1 = x1 - q*y1;
t2 = x2 - q*y2;
t3 = x3 - q*y3;
x1 = y百度文库;
x2 = y2;
x3 = y3;
y1 = t1;
y2 = t2;
y3 = t3;
}
}
int main()
{
int x,y,z,max,min;
z = 0;
}
int main()
{
cout<<"请输入明文:";
gets(ch1);
cout<<"双轨加密后:"<<shuanggui(ch1)<<endl;
return 0;
}
(2).编程实现钥控算法
#include<iostream>
#include<string>
using namespace std;
int N;
int M;
int len(char *ch)
{ //计算密钥长度、明文长度
int i=0;
while(ch[i]!='\0')
i++;
return i;
}
//快速排序
void Qsort(char *ch, int low, int high)
{
if(low >= high)
{
return;
i=0;
string str1="";
string str2="";
while(ch[j]!='\0')
{
if(ch[j]==' ');
else {ch2[i]=ch[j];i++;}
j++;
}
while(k<i)
{
str1+=ch2[k];
k++;
str2+=ch2[k];
k++;
}
return str1+str2;
{
int i=0,j=0;
char c1[20];
while(ch[i]!='\0')
cout<<ch3[j][n];
else ;
}
cout<<endl;
}
else ;
}
}
}
void main()
{
char c1[100]; //明文
char c2[20]; //密钥
cout<<"请输入明文:";
gets(c1);
cout<<"请输入密钥:";
gets(c2);
N=len(c2);
M=len(c1);
printf("请输入两个数:\n");
scanf("%d%d",&x,&y);
max=x>y?x:y;
min=x<y?x:y;
if(ExtendedEuclid(min,max,&z)) {
if(z>0)
printf("%d和%d互素,乘法的逆元是:%d\n",x,y,z);
else printf("%d和%d互素,乘法逆元是:%d\n",x,y,z+max);
yuekong(c1,c2);
}
作业(二)
(1)编程实现求乘法逆元;
#include <stdio.h>
int ExtendedEuclid( int f,int d ,int *result){
int x1,x2,x3,y1,y2,y3,t1,t2,t3,q;
x1 = y2 = 1;
x2 = y1 = 0;
}
int first = low;
int last = high;
char key = ch[first];
//用字表的第一个记录作为枢轴
while(first < last)
{
while(first < last && ch[last] >= key)
{
--last;
}
ch[first] = ch[last];
for(int m=0;m<=N;m++)
{
for(int n=0;n<N;n++)
{
if(ch4[n]==ch2[m])
{
if(i%N==0)
for(int j=0;j<i/N;j++)
cout<<ch3[j][n];
else
for(int j=0;j<(i/N+1);j++)
{
if((ch3[j][n]>='a'&&ch3[j][n]<='z')||(ch3[j][n]>='A'&&ch3[j][n]<='Z'))
}
void yuekong(char *ch0,char *ch2)
{
int i=0,k=0,j=0;
char ch3[10][10];
char ch4[10],ch1[100];
while(ch0[j]!='\0') //除去空格
{
if(ch0[j]==' ');
else {ch1[i]=ch0[j];i++;}
while(first < last && ch[first] <= key)
{
++first;
}
ch[last] = ch[first];
//将比第一个大的移到高端
}
ch[first] = key; //枢轴记录到位
Qsort(ch, low, first-1);
Qsort(ch, first+1, high);
}
else
printf("%d和%d不互素,最大公约数为:%d\n",x,y,z);
return 0;
}
(2)编程实现换位密码;
#include<iostream>
#include<string>
using namespace std;
char ch[30];
char ch1[30];
int x;
int len(char *ch)
x3 = ( f>=d )?f:d;
y3 = ( f>=d )?d:f;
while( 1 )
{
if ( y3 == 0 ) {
*result = x3; //两个数不互素则result为两个数的最大公约数,此时返回值为零
return 0; }
if ( y3 == 1 ) {
*result = y2; //两个数互素则resutl为其乘法逆元,此时返回值为1
东北大学信息安全作业
作业(一)
(1).编程实现双轨加密
#include<iostream>
#include<string>
using namespace std;
char ch1[30];
char ch2[30];
int i;
string shuanggui(char *ch)
{
int j=0,k=0;
j++;
}
ch1[i+1]='\0';
i=0;j=0;
while(ch1[i]!='\0') //生成二维字符数组
{
ch3[i/N][i%N]=ch1[i];
i++;
}
for(int l=0;l<=N;l++)
{
ch4[l]=ch2[l];
}
Qsort(ch2,0,N-1);
cout<<"钥控加密后:"<<endl;
return 1; }
q = x3/y3;
t1 = x1 - q*y1;
t2 = x2 - q*y2;
t3 = x3 - q*y3;
x1 = y百度文库;
x2 = y2;
x3 = y3;
y1 = t1;
y2 = t2;
y3 = t3;
}
}
int main()
{
int x,y,z,max,min;
z = 0;
}
int main()
{
cout<<"请输入明文:";
gets(ch1);
cout<<"双轨加密后:"<<shuanggui(ch1)<<endl;
return 0;
}
(2).编程实现钥控算法
#include<iostream>
#include<string>
using namespace std;
int N;
int M;
int len(char *ch)
{ //计算密钥长度、明文长度
int i=0;
while(ch[i]!='\0')
i++;
return i;
}
//快速排序
void Qsort(char *ch, int low, int high)
{
if(low >= high)
{
return;
i=0;
string str1="";
string str2="";
while(ch[j]!='\0')
{
if(ch[j]==' ');
else {ch2[i]=ch[j];i++;}
j++;
}
while(k<i)
{
str1+=ch2[k];
k++;
str2+=ch2[k];
k++;
}
return str1+str2;
{
int i=0,j=0;
char c1[20];
while(ch[i]!='\0')
cout<<ch3[j][n];
else ;
}
cout<<endl;
}
else ;
}
}
}
void main()
{
char c1[100]; //明文
char c2[20]; //密钥
cout<<"请输入明文:";
gets(c1);
cout<<"请输入密钥:";
gets(c2);
N=len(c2);
M=len(c1);
printf("请输入两个数:\n");
scanf("%d%d",&x,&y);
max=x>y?x:y;
min=x<y?x:y;
if(ExtendedEuclid(min,max,&z)) {
if(z>0)
printf("%d和%d互素,乘法的逆元是:%d\n",x,y,z);
else printf("%d和%d互素,乘法逆元是:%d\n",x,y,z+max);
yuekong(c1,c2);
}
作业(二)
(1)编程实现求乘法逆元;
#include <stdio.h>
int ExtendedEuclid( int f,int d ,int *result){
int x1,x2,x3,y1,y2,y3,t1,t2,t3,q;
x1 = y2 = 1;
x2 = y1 = 0;
}
int first = low;
int last = high;
char key = ch[first];
//用字表的第一个记录作为枢轴
while(first < last)
{
while(first < last && ch[last] >= key)
{
--last;
}
ch[first] = ch[last];
for(int m=0;m<=N;m++)
{
for(int n=0;n<N;n++)
{
if(ch4[n]==ch2[m])
{
if(i%N==0)
for(int j=0;j<i/N;j++)
cout<<ch3[j][n];
else
for(int j=0;j<(i/N+1);j++)
{
if((ch3[j][n]>='a'&&ch3[j][n]<='z')||(ch3[j][n]>='A'&&ch3[j][n]<='Z'))
}
void yuekong(char *ch0,char *ch2)
{
int i=0,k=0,j=0;
char ch3[10][10];
char ch4[10],ch1[100];
while(ch0[j]!='\0') //除去空格
{
if(ch0[j]==' ');
else {ch1[i]=ch0[j];i++;}