实验一加密算法.docx

上传人:b****3 文档编号:3132995 上传时间:2022-11-17 格式:DOCX 页数:21 大小:61.98KB
下载 相关 举报
实验一加密算法.docx_第1页
第1页 / 共21页
实验一加密算法.docx_第2页
第2页 / 共21页
实验一加密算法.docx_第3页
第3页 / 共21页
实验一加密算法.docx_第4页
第4页 / 共21页
实验一加密算法.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

实验一加密算法.docx

《实验一加密算法.docx》由会员分享,可在线阅读,更多相关《实验一加密算法.docx(21页珍藏版)》请在冰豆网上搜索。

实验一加密算法.docx

实验一加密算法

实验一加密算法

1、实验背景

●多表替代密码:

由多个简单的替代密码构成,例如,可能有5个不同的简单替代密码,分别用于替代明文中不同位置的字符。

主要学习维吉尼亚表。

●换位密码:

一种早期的加密方法,明文的字母保持相同,但顺序被打乱了。

●DES加密算法工作的基本原理:

其入口参数有三个:

key、data、mode。

key为加密解密使用的密钥,data为加密解密的数据,mode为其工作模式。

当模式为加密模式时,明文按照64位进行分组,形成明文组,key用于对数据加密,当模式为解密模式时,key用于对数据解密。

实际运用中,密钥只用到了64位中的56位,这样才具有高的安全性。

主要掌握S盒替代。

2、实验目的

1、实验课前复习DES加密、传统加密算法—多表替代(维吉尼亚表替代)、换位密码算法。

2、任选C、C++、VC++等其中一种来实现编程实现加密算法。

3、调试程序,给定一段明文,和密钥,通过加密算法,给出密文。

4、目的:

掌握加密算法的基本原理及其加密方法的详细步骤。

3、实验所需设备

安装Windows9x/2000/XP/2003操作系统和Visualstudio6.0环境的PC。

4、实验拓扑

5、实验步骤

●多表替代注意红色字体代码

1启动VC++6.0。

2新建Win32ConsoleApplication。

3在ProjectName和Locate位置填上工程名weijiniya和保存位置(自选)。

4按OK按钮。

选AnsimpleProject。

5按Finish按钮。

6在weijiniya.cpp中添加如下代码:

#include"stdafx.h"

#include

#include

#include

#include

voidShift()/*移位密码*/

{

charc[100];

intlength,i=0,key=0;

//clrscr();

printf("********ShiftCipher********\nPleaseinputprimalsentence:

");

gets(c);

length=strlen(c);

printf("Inputthekey(0~26):

");

scanf("%d",&key);

getchar();

if(key<0)

{

printf("Thevalueofkeyiserror!

\nPressanykeytoreturn...");

getch();

return;

}

for(i=0;i

{

if(c[i]>96&&c[i]<123)

c[i]=(c[i]+key-97)%26+65;

elseif(c[i]>64&&c[i]<91)

c[i]=(c[i]+key-65)%26+65;

}

printf("Resultis:

%s\n",c);

for(i=0;i

{

if(c[i]>64&&c[i]<91)

c[i]=(c[i]-key-65+26)%26+97;

}

printf("\nAftertranslatedthesentence,wecanseetheprimalsentenceasfollow:

\n%s\n",c);

printf("Pressanykeytoreturn...");

getch();

}

intgcd(inta,intb)/*辗转相除法求a,b的最大公因数*/

{

intk=0;

do

{

k=a%b;

a=b;

b=k;

}while(k!

=0);

returna;

}

intNi(inta,intb)/*求a相对于b的逆*/

{

inti=0;

while(a*(++i)%b!

=1);

returni;

}

voidAffine()/*仿射密码*/

{

charc[100];

intlength,i=0,ka=0,kb=0,tmp;

//clrscr();

printf("********AffineCipher********\nPleaseinputprimalsentence:

");

gets(c);

length=strlen(c);

printf("Inputthekey(2numbers):

");

scanf("%d%d",&ka,&kb);

getchar();

if(gcd(ka,26)!

=1)

{

printf("Thevalueofthekeyiserror!

\nPressanykeytoreturn...");

return;

}

for(i=0;i

{

if(c[i]>96&&c[i]<123)

c[i]=(ka*(c[i]-97)+kb)%26+65;

elseif(c[i]>64&&c[i]<91)

c[i]=(ka*(c[i]-65)+kb)%26+65;

}

printf("Resultis:

%s\n",c);

for(i=0;i

{

if(c[i]>64&&c[i]<91)

{

tmp=Ni(ka,26)*((c[i]-65)-kb);

if(tmp<0)

c[i]=tmp%26+26+97;

else

c[i]=tmp%26+97;

}

}

printf("\nAftertranslatedthesentence,wecanseetheprimalsentenceasfollow:

\n%s\n",c);

printf("Pressanykeytoreturn...");

getch();

}

voidVigenere()/*维吉利亚密码*/

{

charc[100],key[100];

intlenc,lenk,i=0,j=0,tmp;

//clrscr();

printf("********VigenereCipher********\nPleaseinputprimalsentence:

");

gets(c);

lenc=strlen(c);

strcpy(c,strupr(c));

printf("Inputthekey:

");

gets(key);

lenk=strlen(key);

strcpy(key,strupr(key));

for(;i

{

j=j%lenk;

if(c[i]>64&&c[i]<91)

{

c[i]=(c[i]-65+key[j]-65)%26+65;

j++;

}

}

printf("Resultis:

%s\n",c);

for(i=0,j=0;i

{

j=j%lenk;

if(c[i]>64&&c[i]<91)

{

tmp=c[i]-65-(key[j]-65);

if(tmp>=0)

c[i]=tmp%26+97;

else

c[i]=(tmp+26)%26+97;

j++;

}

}

printf("\nAftertranslatedthesentence,wecanseetheprimalsentenceasfollow:

\n%s\n",c);

printf("Pressanykeytoreturn...");

getch();

}

voidPermutation()/*置换密码*/

{

charc[100],*q;

int*key,len,m,i,j=0;

//clrscr();

printf("********PermutationCipher********\nPleaseinputprimalsentence:

");

gets(c);

strcpy(c,strupr(c));

len=strlen(c);

for(i=0;i

{

if(c[i]<65||c[i]>90)

{

for(j=i;j

c[j]=c[j+1];

len--;

}

}

c[len]='\0';

printf("Inputthelengthofthekey:

");

scanf("%d",&m);

//key=(int)new(m*sizeof(int));

//q=(int)new(len*sizeof(int));

printf("Inputthekey:

");

for(i=0;i

{

scanf("%d",key+i);

key[i]--;

}

getchar();

for(i=0;i

{

j=(i/m)*m;

q[i]=c[*(key+i%m)+j];

}

q[i]='\0';

printf("Resultis:

%s\n",q);

for(i=0,j=0;i

{

j=(i/m)*m;

c[*(key+i%m)+j]=q[i]+32;

}

c[len]='\0';

printf("Aftertranslatedthesentence,wecanseetheprimalsentenceasfollow:

\n%s\n",c);

printf("Pressanykeytoreturn...");

free(key);

free(q);

getch();

}

intmain(intargc,char*argv[])

{

chari='0';

//clrscr();

while(i!

='5')

{

//clrscr();

printf("********Press1~5tochoose:

********\n");

printf("1.ShiftCipher\n2.AffineCipher\n3.VigenereCipher\n4.PermutationCipher\n5.Exit\n");

i=getch();

if(i=='1')

Shift();

elseif(i=='2')

Affine();

elseif(i=='3')

Vigenere();

elseif(i=='4')

Permutation();

elseif(i=='5')

break;

}

return0;

}

7按运行按钮,看编译运行结果,如图1-

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1