当前位置:文档之家› 加密解密代码

加密解密代码

加密解密代码
加密解密代码

#include

#include

#include

#define L 50

#define l 26

int CharAt(char str[],char ch)//此方法是用来寻找字符在字符串中的位置{

int i;//,lg;

//lg=strlen(str);

for(i=0;i<26;i++)

{

if(str[i]==ch)

{

return i+1;

}

}

return -1;

}

int CreatShow(char show[])//创建明文

{

int i,shlg;

for(i=0;i<50;i++)

{

show[i]='\0';

}

printf("\n请输入明文!\n");

fflush(stdin);

gets(show);

shlg=strlen(show);

return shlg;

}

int CreatShade(char shade[])//创建密文

{

int i,sdlg;

for(i=0;i<50;i++)

{

shade[i]='\0';

}

printf("\n请输入密文!\n");

fflush(stdin);

gets(shade);

sdlg=strlen(shade);

return sdlg;

}

int CreatKey(char key[])//创建密钥

{

int i,klg;

for(i=0;i<26;i++)

{

key[i]='\0';

}

printf("\n请输入密钥!\n");

fflush(stdin);

gets(key);

for(i=0;key[i]!='\0';i++)

{

klg=i+1;

}

return klg;

}

int Check(char Data)

{

if((Data<'A'||Data>'Z')&&(Data<'a'||Data>'z'))

{

printf("输入不正确!\n");

return 0;

}

else if(Data==' ')

{

return 0;

}

return 1;

}

void EncodeCasser()//凯撒加密算法

{

int i,shlg;

char Show[50],Shade[50];

shlg=CreatShow(Show);

for(i=0;i

{

if(Check(Show[i]))

{

if(Show[i]>='a'&&Show[i]<='z')

{

Shade[i]=Show[i]-32;

}

else

{

Shade[i]=Show[i];

Show[i]+=32;

}

if(Shade[i]+17>'Z')

{

Shade[i]-=9;

}

else

{

Shade[i]+=17;

}

}

else

{

printf("本系统不支持空格!请重新输入!\n");

return;

}

}

Shade[i]='\0';

printf("\n明文是:%s",Show);

printf("\n转换后是:%s\n",Shade);

}

void DncodeCasser()//凯撒解密算法

{

int i,sdlg;

char Show[50],Shade[50];

sdlg=CreatShade(Shade);

for(i=0;i

{

if(Check(Shade[i]))

{

if(Shade[i]>='A'&&Shade[i]<='Z')

{

Show[i]=Shade[i]+32;

}

else

{

Show[i]=Shade[i];

Shade[i]-=32;

}

if(Show[i]-17<'a')

{

Show[i]+=9;

}

else

{

Show[i]-=17;

}

}

else

{

printf("本系统不支持空格!请重新输入!\n");

return;

}

}

Show[i]='\0';

printf("\n密文是:%s",Shade);

printf("\n转换后是:%s\n",Show);

}

void Casser()//凯撒算法

{

char ch;

printf("......... 凯撒密码算法.........\n");

printf("......... .........\n");

printf("......... 加密解密系统.........\n");

printf("......... A. 加密.........\n");

printf("......... B. 解密.........\n");

printf("......... Q. 退出.........\n");

printf("......... 加密还是解密?.........\n");

fflush(stdin);

scanf("%c",&ch);

switch(ch)

{

case 'A':

case 'a':

EncodeCasser();

break;

case 'B':

case 'b':

DncodeCasser();

break;

default:

break;

}

}

void EncodeInverted()//字母倒排算法加密

{

int i,shlg;

char Show[50],Shade[50];

shlg=CreatShow(Show);

for(i=0;i

{

if(Check(Show[i]))

{

if(Show[i]>='A'&&Show[i]<='Z')

{

Show[i]+=32;

}

else

{

}

Shade[i]=187-Show[i];

}

else

{

printf("本系统不支持空格!请重新输入!\n");

return;

}

}

Shade[i]='\0';

printf("\n明文是:%s",Show);

printf("\n转换后是:%s\n",Shade);

}

void DecodeInverted()//字母倒排算法解密

{

int i,sdlg;

char Show[50],Shade[50];

sdlg=CreatShade(Shade);

for(i=0;i

{

if(Check(Shade[i]))

{

if(Shade[i]>='a'&&Shade[i]<='z')

{

Shade[i]-=32;

}

else

{

}

Show[i]=187-Shade[i];

}

else

{

printf("本系统不支持空格!请重新输入!\n");

return;

}

}

Show[i]='\0';

printf("\n密文是:%s",Shade);

printf("\n转换后是:%s\n",Show);

}

void Inverted()//字母倒排算法

{

char ch;

printf("......... 字母倒排算法.........\n");

printf("......... .........\n");

printf("......... 加密解密系统.........\n");

printf("......... A. 加密.........\n");

printf("......... B. 解密.........\n");

printf("......... Q. 退出.........\n");

printf("......... 加密还是解密?.........\n");

fflush(stdin);

scanf("%c",&ch);

switch(ch)

{

case 'A':

case 'a':

EncodeInverted();

break;

case 'B':

case 'b':

DecodeInverted();

break;

default:

break;

}

}

void EncodeSingleForm()//单表置换密码加密

{

int i,shlg,klg,j,k;

char Show[50],Shade[50],Key[26];

int cnt=26;

char temp[26];

klg=CreatKey(Key);

shlg=CreatShow(Show);

printf("%c",Show[0]);

for(i=1;i

{

if(Check(Key[i]))

{

for(j=0;j

{

if(Key[j]==Key[i])

{

for(k=i+1;k

{

Key[k-1]=Key[k];

}

klg--;

i--;

j=i;

}

}

}

else

{

printf("本系统不支持空格!请重新输入!\n");

return;

}

}

for(i=65,j=0;i<91;i++)

{

temp[j]=i;

j++;

}

for(i=0;i

{

for(j=0;j

{

if(temp[i]==Key[j])

{

for(k=i+1;k

{

temp[k-1]=temp[k];

}

j=klg;

cnt--;

i--;

}

}

}

for(i=klg,j=0;i<26;i++,j++)

{

Key[i]=temp[j];

}

for(i=0;i

{

if(Check(Show[i]))

{

if(Show[i]>='a'&&Show[i]<='z')

{

Shade[i]=Show[i]-32;

}

else

{

Shade[i]=Show[i];

Show[i]+=32;

}

j=Shade[i]-65;

Shade[i]=Key[j];

}

else

{

printf("本系统不支持空格!请重新输入!\n");

return;

}

}

Shade[i]='\0';

printf("\n明文是:%s",Show);

printf("\n转换后是:%s\n",Shade);

}

void DecodeSingleForm()//单表置换密码解密

{

int i,sdlg,klg,j,k;

char Show[50],Shade[50],Key[26];

int cnt=26;

char temp[26];

klg=CreatKey(Key);

sdlg=CreatShade(Shade);

printf("%c",Shade[0]);

for(i=1;i

{

if(Check(Key[i]))

{

for(j=0;j

{

if(Key[j]==Key[i])

{

for(k=i+1;k

{

Key[k-1]=Key[k];

}

klg--;

i--;

j=i;

}

}

}

else

{

printf("本系统不支持空格!请重新输入!\n");

break;

}

}

for(i=65,j=0;i<91;i++)

{

temp[j]=i;

j++;

}

for(i=0;i

{

for(j=0;j

{

if(temp[i]==Key[j])

{

for(k=i+1;k

{

temp[k-1]=temp[k];

}

j=klg;

cnt--;

i--;

}

}

}

for(i=klg,j=0;i<26;i++,j++)

{

Key[i]=temp[j];

}

for(i=0;i

{

if(Check(Shade[i]))

{

if(Shade[i]>='a'&&Shade[i]<='z')

{

Show[i]=Shade[i];

Shade[i]-=32;

}

else

{

Show[i]=Shade[i]+32;

}

j=CharAt(Key,Shade[i]);

Show[i]=j+96;

}

else

{

printf("本系统不支持空格!请重新输入!\n");

break;

}

}

Show[i]='\0';

printf("\n密文是:%s",Shade);

printf("\n转换后是:%s\n",Show);

}

void SingleForm()//单表置换密码

{

char ch;

printf("......... 单表置换算法.........\n");

printf("......... .........\n");

printf("......... 加密解密系统.........\n");

printf("......... A. 加密.........\n");

printf("......... B. 解密.........\n");

printf("......... Q. 退出.........\n");

printf("......... 加密还是解密?.........\n");

fflush(stdin);

scanf("%c",&ch);

switch(ch)

{

case 'A':

case 'a':

EncodeSingleForm();

break;

case 'B':

case 'b':

DecodeSingleForm();

break;

default:

break;

}

}

void EncodeVictory()//维吉利亚密码加密算法{

char Key[26];

char Data[50];

char Shade[50];//存取密文

int klg,dlg,i,j;

int temp1[50],temp2[50];

for(i=0;i<26;i++)

{

Key[i]='\0';

}

for(i=0;i<50;i++)

{

Data[i]='\0';

}

printf("请输入密钥!(不要太长)\n");

fflush(stdin);

gets(Key);

for(i=0;Key[i]!='\0';i++)//获取Key的长度

{

klg=i+1;

}

for(i=0;i

{

if((Key[i]<'A'||Key[i]>'Z')&&(Key[i]<'a'||Key[i]>'z'))

{

printf("你输入的密钥不正确!\n");

//return;

}

else

if(Key[i]>='a'&&Key[i]<='z')

{

Key[i]-=32;

}

}

printf("\n密钥是%s\n",Key);

for(i=0;i

{

temp1[i]=Key[i]-65;

}

printf("请输入明文!\n");

fflush(stdin);

gets(Data);

for(i=0;Data[i]!='\0';i++)//获得明文的实际长度

{

dlg=i+1;

}

for(i=0;i

if((Data[i]<'A'||Data[i]>'Z')&&(Data[i]<'a'||Data[i]>'z')) {

printf("你输入的明文不正确!\n");

//return;

}

else

if(Data[i]>='A'&&Data[i]<='Z')

{

Data[i]+=32;

}

}

printf("\n明文是%s\n",Data);

for(i=0;i

{

temp2[i]=Data[i]-97;

}

for(i=klg;i

for(j=0;j

{

if(i%klg==j)

{

temp1[i]=temp1[j];

}

}

}

for(i=0;i

{

Shade[i]=(temp1[i]+temp2[i])%26+65;

}

Shade[i]='\0';

printf("密文是:");

puts(Shade);

printf("\n");

}

void DecodeVictory()//维吉利亚密码解密算法

{

char Key[26];

char show[50];//存取明文

char Shade[50];//存取密文

int klg,slg,i,j;

int temp1[50],temp2[50];

for(i=0;i<26;i++)

{

Key[i]='\0';

}

for(i=0;i<50;i++)

{

Shade[i]='\0';

}

printf("请输入密钥!(不要太长)\n");

fflush(stdin);

gets(Key);

for(i=0;Key[i]!='\0';i++)//获取Key的长度

{

klg=i+1;

}

for(i=0;i

{

if((Key[i]<'A'||Key[i]>'Z')&&(Key[i]<'a'||Key[i]>'z'))

{

printf("你输入的密钥不正确!\n");

//return;

}

else

if(Key[i]>='a'&&Key[i]<='z')

{

Key[i]-=32;

}

}

printf("\n密钥是%s\n",Key);

for(i=0;i

{

temp1[i]=Key[i]-65;

}

printf("请输入密文!\n");

// fflush(stdin);

gets(Shade);

for(i=0;Shade[i]!='\0';i++)//获得明文的实际长度

{

slg=i+1;

}

for(i=0;i

{

if((Shade[i]<'A'||Shade[i]>'Z')&&(Shade[i]<'a'||Shade[i]>'z'))

{

printf("你输入的密文不正确!\n");

//return;

}

else

if(Shade[i]>='A'&&Shade[i]<='Z')

{

Shade[i]+=32;

}

}

printf("\n密文是%s\n",Shade);

for(i=0;i

{

temp2[i]=Shade[i]-97;

}

for(i=klg;i

{

for(j=0;j

{

if(i%klg==j)

{

temp1[i]=temp1[j];

}

}

}

for(i=0;i

{

if((Shade[i]-97)-temp1[i]<0)

{

Shade[i]+=26;

}

show[i]=Shade[i]-temp1[i];

}

show[i]='\0';

printf("\n明文是:");

puts(show);

printf("\n");

}

void Victory()

{

char ch;

printf("......... 维吉利亚算法.........\n");

printf("......... .........\n");

printf("......... 加密解密系统.........\n");

printf("......... A. 加密.........\n");

printf("......... B. 解密.........\n");

printf("......... Q. 退出.........\n");

printf("......... 加密还是解密?.........\n");

fflush(stdin);

scanf("%c",&ch);

switch(ch)

{

case 'A':

case 'a':

EncodeVictory();

break;

case 'B':

case 'b':

DecodeVictory();

break;

default:

break;

}

}

void EncodeExchange()

{

char Data[50];

char Shade[50];//存取密文

int dlg,i,j,m,cnt,k;

for(i=0;i<50;i++)

{

Data[i]='\0';

}

printf("请输入明文!\n");

fflush(stdin);

gets(Data);

dlg=strlen(Data);

for(i=0;i

{

if(Data[i]==' ')

{

for(k=i+1;k

{

Data[k-1]=Data[k];

}

dlg--;

i--;

}

else

if((Data[i]<'A'||Data[i]>'Z')&&(Data[i]<'a'||Data[i]>'z'))

{

printf("你输入的明文不正确!\n");

break;

}

else

if(Data[i]>='A'&&Data[i]<='Z')

{

Data[i]+=32;

}

}

printf("\n明文是:");

puts(Data);

cnt=(dlg-1)/5+1;

for(i=dlg;i

{

Data[i]='\0';

}

m=0;

for(i=0;i<5;i++)

{

for(j=0;j

{

if(Data[i+5*j]=='\0')

{

m--;

}

else

{

Shade[m]=Data[i+5*j];

}

m++;

}

}

Shade[dlg]='\0';

printf("\n密文是:");

puts(Shade);

printf("\n");

}

void DecodeExchange()

{

int i,j,slg,m,cnt,k=0;

char shade[50];

char show[50];

for(i=0;i<50;i++)

{

shade[i]='\0';

}

printf("\n请输入密文!\n");

fflush(stdin);

gets(shade);

slg=strlen(shade);

for(i=0;i

{

if(shade[i]==' ')

{

printf("\n本系统译文不支持空格!请重新输入!");

}

else

if((shade[i]<'A'||shade[i]>'Z')&&(shade[i]<'a'||shade[i]>'z'))

{

printf("\n你输入的密文不正确!\n");

}

else

if(shade[i]>='A'&&shade[i]<='Z')

{

shade[i]+=32;

}

}

printf("\n输入的密文是:");

puts(shade);

cnt=(slg-1)/5+1;

for(i=slg;i<5*cnt;i++)

{

shade[i]='\0';

}

m=0;

if(slg%5==1)

{

for(i=0;i

{

show[i*5]=shade[k];

k++;

m=k-1;

}

for(j=1;j<5;j++)

{

for(i=0;i

{

show[i*5+j]=shade[m+1];

m++;

}

}

m=0;k=0;

}

else if(slg%5==2)

{

for(j=0;j<2;j++)

{

for(i=0;i

{

show[i*5+j]=shade[k];

k++;

m=k-1;

}

}

for(j=2;j<5;j++)

for(i=0;i

{

show[i*5+j]=shade[m+1];

m++;

}

}

}

else

{

for(i=0;i

{

for(j=0;j<5;j++)

{

if(shade[j*cnt+i]=='\0')

{

}

else

{

show[m]=shade[j*cnt+i];

m++;

}

}

}

}

show[slg]='\0';

printf("\n明文是:");

puts(show);

printf("\n");

}

void Exchange()//只实现先行后列的方法

{

char ch;

printf("......... 转换加密算法.........\n");

printf("......... .........\n");

printf("......... 加密解密系统.........\n");

printf("......... A. 加密.........\n");

printf("......... B. 解密.........\n");

printf("......... Q. 退出.........\n");

printf("......... 加密还是解密?.........\n");

fflush(stdin);

scanf("%c",&ch);

switch(ch)

{

case 'A':

case 'a':

EncodeExchange();

break;

case 'B':

case 'b':

DecodeExchange();

break;

break;

}

}

void main()

{

int choice;

int tag=1;

while(tag)

{

//printf("\n\n");

printf("\n......... 加密解密系统.........\n");

printf("......... .........\n");

printf(".........1.恺撒密码算法.........\n");

printf(".........2.倒排密码算法.........\n");

printf(".........3.单表置换算法.........\n");

printf(".........4.维吉利亚算法.........\n");

printf(".........5.转换密码算法.........\n");

printf(".........6. 退出.........\n");

printf("\n请选择你要进行的操作\n");

scanf("%d",&choice);

switch(choice)

{

case 1:

Casser();

break;

case 2:

Inverted();

break;

case 3:

SingleForm();

break;

case 4:

Victory();

break;

case 5:

Exchange();

break;

case 6:

tag=0;

break;

default:

tag=0;

break;

}

fflush(stdin);

}

}

文件加密与解密—Java课程设计报告

JAVA课程设计题目:文件的加密与解密 姓名: 学号: 班级: 日期:

目录 一、设计思路 (3) 二、具体实现 (3) 三、运行调试与分析讨论 (8) 四、设计体会与小结 (11) 五、参考文献 (12) 六、附录 (12)

一、设计思路 自从Java技术出现以业,有关Java平台的安全性用由Java技术发展所引发的安全性问题,引起了越来越多的关注。目前,Java已经大量应用于各个领域,研究Java的安全性对于更好地利用Java具有深远的意义。使用Java的安全机制设计和实现安全系统更具有重要的应用价值。 本课程设计,主要实践Java安全中的JCE模块,包括密钥生成,Cipher对象初始化、加密模式、填充模式、底层算法参数传递,也涉及文件读写与对象输入输出流。 二、具体实现 本系统通过用户界面接收三个参数:明文文件、密文文件、口令。采用DES加密算法,密码分组链(Cipher Block Chaining,CBC)加密模式,PKCS#5-Padding的分组填充算法。因为CBC涉及到底层算法参数的解密密钥的传递,所以将明文文件中的字节块以密封对象(Sealed Object)的方式加密后,用对象流输出到密文文件,这样就将密文、算法参数、解密密钥三都密封到一个对象中了。口令的hash值作为产生密钥的参数。设计流程图如下所示: 文件加密与解密设计流程图

本系统中,包含Default,Shares,SecretKey,EncAndDec四个包共6个类组成。定义的几个参数:MAX_BUF_SIZE为每次从文件中读取的字节数,也是内存缓冲区的大小;加密算法为DES;加密模式是密码分组链(CBC)模式;分组填充方式是PKCS#5Padding。包和类结构图如下所示: 本课程设计,包和类结构图: 以下为包中的类的方法实现说明 Package Shares类结构图

简单讲解加密技术

简单讲解加密技术 加密技术是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)。 加密技术包括两个元素:算法和密钥。算法是将普通的信息或者可以理解的信息与一串数字(密钥)结合,产生不可理解的密文的步骤,密钥是用来对数据进行编码和解密的一种算法。在安全保密中,可通过适当的钥加密技术和管理机制来保证网络的信息通信安全。 什么是加密技术呢?加密技术是电子商务采取的主要安全保密措施,是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)。加密技术包括两个元素:算法和密钥。算法是将普通的文本(或者可以理解的信息)与一窜数字(密钥)的结合,产生不可理解的密文的步骤,密钥是用来对数据进行编码和解码的一种算法。在安全保密中,可通过适当的密钥加密技术和管理机制来保证网络的信息通讯安全。密钥加密技术的密码体制分为对称密钥体制和非对称密钥体制两种。相应地,对数据加密的技术分为两类,即对称加密(私人密钥加密)和非对称加密(公开密钥加密)。对称加密以数据加密标准(DES,Data Enc ryption Standard)算法为典型代表,非对称加密通常以RSA(Rivest Shamir Ad 1eman)算法为代表。对称加密的加密密钥和解密密钥相同,而非对称加密的加密密钥和解密密钥不同,加密密钥可以公开而解密密钥需要保密。 加密技术的种类:对称加密(私人密钥加密),非对称加密(公开密钥加密),单项加密。 对称加密:对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法,对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DNS的加密性好,而且对计算机功能要求也没有那么高。IDEA加密标准由PGP(Pretty Good Privacy)系统使用。 对称加密的种类:DES(数据加密的标准)使用56位的密钥。AES:高级加密标准。3 DES:三圈加密标准它作为现在加密算法的标准。 非对称加密:即公钥加密,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对

汇编加密解密

目录 一.设计目标及目的 (3) 1.1主界面 (3) 1.2设计要求 (3) 1.3菜单栏说明 (4) 1.4显示目录下的文件 (4) 1.5加密文件 (5) 1.6原文件与加密文件 (5) 参考文献: (6) 1.7系统结构设计 (7) 二.设计的意义及代码 (7) 2.1 小结 (7) 2.2 程序代码 (8) 三.实验心得 (14)

一.设计目标及目的 功能: 1、按指定文件名读取文件。 2、使用算法对读取的文件进行加密。 3、加密文件写入磁盘。 设计目的: 1、学生增进对汇编语言的认识,加强用汇编语言编程的能力。 2、使学生了解和掌握汇编语言程序设计过程、方法及其实现,为以后微机原理课程的学习打下良好基础。 3、进一步掌握屏幕输出显示的设计方法。 1.1主界面 程序运行主界面如图所示。 1.2设计要求 1、巩固和加深学生对汇编语言课程基本知识的理解和掌握。 2、学会查阅和汇编语言相关的规范、手册等技术资料。 3、能正确地绘制和使用程序流程图。

1.3菜单栏说明 d显示当前目录文件名 t显示文件内容(提示:filename:键入文件全名,若该文件不存在,则提示:file not found!;若该文件存在,显示该文件内容。) s加密文件内容(提示:键入文件全名,若该文件不存在,则提示:error!若该文件存在,则提示键入加密或解密的KEY,KEY为小于等于255) 注:加密解密使用同一方法,且文件加密后会自动退出菜单! q退出主菜单。 1.4显示目录下的文件

1.5加密文件 1.6原文件与加密文件原文件: 加密后:

参考文献: 沈美明等《IBM-PC汇编语言程序设计》清华大学出版社,2001.8第二版沈美明《IBM-PC汇编语言程序设计实验教程》清华大学出版社,1992.9第一版 杨路明汇编语言程序设计中南大学出版社出版 杨秀文80x86汇编语言程序设计教程清华大学出版社 《微型计算机原理及应用》第四版周明德清华大学出版社

加密解密课程设计

兰州商学院陇桥学院工学系课程设计报告 课程名称: Java 设计题目:加密与解密 系别:工学系 专业 (方向):信息管理与信息系统 年级、班:2012级(2)班 学生姓名:费亚芬 学生学号: 208

指导教师:张鑫 2014年7 月 1日 目录 一、系统开发的背景................................. 错误!未定义书签。 二、系统分析与设计................................. 错误!未定义书签。(一)............................................. 系统功能要求错误!未定义书签。(二)......................................... 系统模块结构设计错误!未定义书签。 三、系统的设计与实现............................... 错误!未定义书签。(一)图形用户界面模块 ........................... 错误!未定义书签。(二)加密操作模块 ............................... 错误!未定义书签。 (三)解密操作模块................................ 错误!未定义书签。(四)文件保存模块 ............................... 错误!未定义书签。

(五)文件选择模块 ............................... 错误!未定义书签。 四、系统测试....................................... 错误!未定义书签。(一)测试加密..................................... 错误!未定义书签。(二)测试选择加密文件............................. 错误!未定义书签。(三)测试生成加密文件............................. 错误!未定义书签。(四)测试浏览加密文件............................. 错误!未定义书签。(五)测试解密文件................................. 错误!未定义书签。 五、总结........................................... 错误!未定义书签。 六、附件(代码、部分图表) ......................... 错误!未定义书签。

RSA加密算法加密与解密过程解析

RSA加密算法加密与解密过程解析 1.加密算法概述 加密算法根据内容是否可以还原分为可逆加密和非可逆加密。 可逆加密根据其加密解密是否使用的同一个密钥而可以分为对称加密和非对称加密。 所谓对称加密即是指在加密和解密时使用的是同一个密钥:举个简单的例子,对一个字符串C做简单的加密处理,对于每个字符都和A做异或,形成密文S。 解密的时候再用密文S和密钥A做异或,还原为原来的字符串C。这种加密方式有一个很大的缺点就是不安全,因为一旦加密用的密钥泄露了之后,就可以用这个密钥破解其他所有的密文。 非对称加密在加密和解密过程中使用不同的密钥,即公钥和私钥。公钥用于加密,所有人都可见,私钥用于解密,只有解密者持有。就算在一次加密过程中原文和密文发生泄漏,破解者在知道原文、密文和公钥的情况下无法推理出私钥,很大程度上保证了数据的安全性。 此处,我们介绍一种非常具有代表性的非对称加密算法,RSA加密算法。RSA 算法是1977年发明的,全称是RSA Public Key System,这个Public Key 就是指的公共密钥。 2.密钥的计算获取过程 密钥的计算过程为:首先选择两个质数p和q,令n=p*q。 令k=?(n)=(p?1)(q?1),原理见4的分析 选择任意整数d,保证其与k互质 取整数e,使得[de]k=[1]k。也就是说de=kt+1,t为某一整数。

3.RSA加密算法的使用过程 同样以一个字符串来进行举例,例如要对字符串the art of programming 进行加密,RSA算法会提供两个公钥e和n,其值为两个正整数,解密方持有一个私钥d,然后开始加密解密过程过程。 1. 首先根据一定的规整将字符串转换为正整数z,例如对应为0到36,转化后形成了一个整数序列。 2. 对于每个字符对应的正整数映射值z,计算其加密值M=(N^e)%n. 其中N^e表示N的e次方。 3. 解密方收到密文后开始解密,计算解密后的值为(M^d)%n,可在此得到正整数z。 4. 根据开始设定的公共转化规则,即可将z转化为对应的字符,获得明文。 4.RSA加密算法原理解析 下面分析其内在的数学原理,说到RSA加密算法就不得不说到欧拉定理。 欧拉定理(Euler’s theorem)是欧拉在证明费马小定理的过程中,发现的一个适用性更广的定理。 首先定义一个函数,叫做欧拉Phi函数,即?(n),其中,n是一个正整数。?(n)=总数(从1到n?1,与n互质整数) 比如5,那么1,2,3,4,都与5互质。与5互质的数有4个。?(5)=4再比如6,与1,5互质,与2,3,4并不互质。因此,?(6)=2

密码学课程方案AES加密解密文档

个人资料整理仅限学习使用 成都信息工程学院课程设计报告 AES加密解密的实现 课程名称:应用密码算法程序设计 学生姓名: 学生学号: 专业班级: 任课教师: 年月日

个人资料整理仅限学习使用 附件:课程设计成绩评价表

个人资料整理仅限学习使用目录

1.背景 AES,密码学中的高级加密标准

DES加密算法与解密(带流程图)

一、DES加密及解密算法程序源代码: #include usingnamespacestd; conststaticcharIP_Table[]={//IP_Table置换 58,50,42,34,26,18,10,2, 60,52,44,36,28,20,12,4, 62,54,46,38,30,22,14,6, 64,56,48,40,32,24,16,8, 57,49,41,33,25,17,9,1, 59,51,43,35,27,19,11,3, 61,53,45,37,29,21,13,5, 63,55,47,39,31,23,15,7 }; conststaticcharFinal_Table[]={ //最终置换40,8,48,16,56,24,64,32, 39,7,47,15,55,23,63,31, 38,6,46,14,54,22,62,30, 37,5,45,13,53,21,61,29, 36,4,44,12,52,20,60,28, 35,3,43,11,51,19,59,27, 34,2,42,10,50,18,58,26, 33,1,41,9,49,17,57,25 }; conststaticcharS_Box[8][64]={ //s_box /*S1*/

0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8, 4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0, 15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13}, /*S2*/ {15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10, 3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5, 0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15, 13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9}, /*S3*/ {10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8, 13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1, 13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7, 1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12}, /*S4*/ {7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15, 13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9, 10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4, 3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14}, /*S5*/ {2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9, 14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6, 4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14, 11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3}, /*S6*/ {12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,

java文件加密解密课程设计

软件学院 课程设计报告书 课程名称面向对象程序设计 设计题目文本文档的加密与解密 专业班级财升本12-1班 学号 1220970120 姓名王微微 指导教师徐娇月 2013年 1 月

1 设计时间 2013年1月14日-2013年1月18日 2 设计目的 面向对象程序设计是一门实践性很强的计算机专业基础课程。通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。 3 设计任务 对文件进行加密解密 4 设计内容 4.1 需求分析 (1)给定任意一个文本文件,进行加密,生成另一个文件。 (2)对加密后的文件还原。 4.2 总体设计 4.2.1 包的描述 导入了java.awt; java.awt.event; java.io; javax.swing等包。 4.2.2 类的描述 Myframe类;E1类。其中Myframe类继承Frame类;可以扩展Frame的功能并且可以实例化的多种功能,这个类也实现了ActionListener这个接口,它是Java中关于事件处理的一个接口,ActionListener用于接收操作事件的侦听器接口。对处理操作事件感兴趣的类可以实现此接口,而使用该类创建的对象可使用组件的addActionListener 方法向该组件注册。在发生操作事件时,调用该对象的actionPerformed 方法。 4.3 页面设计

图4.3-1 显示页面 代码实现: addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } });

加密技术及密码破解实验报告

第九章、实验报告 实验一、设置Windows启动密码 一、实验目的:利用Windows启动密码保存重要文件。 二、实验步骤: 1、在Windows XP系统中选择开始——运行,在打开输入框中“syskey.exe”,点击确定,打开“保证Windows XP账户数据库的安全”对话框。 2、单击【更新】,打开【启动密码】对话框,然后输入密码,在【确认】文本框中再次输入密码,单击【确定】

实验二、为word文档加密解密 一、实验目的:保护数据的安全 二、实验步骤: 1、打开一个需要加密的文档,选择【工具】——【选项】——【安全性】然后输入想要设置打开文件时所需的密码 2、单击【高级(A)】打开加密类型对话框,选中【加密文档属性】复选框,单击【确定】。

3、打开文件的【确认密码】对话框,输入打开文件时需要的密码,单击【确定】,随即打开【确认密码】对话框,输入密码。 4、保存文件后,重新打开Word文档,打开【密码】,输入打开文件所需的密码,单击【确定】输入修改的密码,单击【确定】 破解word密码 (1)安装Advanced Office Password Recovery软件,安装完成后打开需要破解的word 文档,进行暴力破解,结果如图所示: 实验三、使用WinRAR加密解密文件

一.实验目的:加密文件,保证文件的安全性。 二.实验步骤: 1、在需要加密的文件夹上右击,选中【添加到压缩文件】打开【压缩文件名和参数】 2、选中【压缩文件格式】组合框中的【RAR】并在【压缩选项】中选中【压缩后删除源文件】然后切换到【高级】,输入密码,确认密码。 3、关闭对话框,单击确定,压缩完成后,双击压缩文件,系统打开【输入密码对话框】 破解WinRAR加密的文件 (1)安装Advanced RAR Password Recovery软件,打开WinRAR加密文件,进行暴力破解,获得密码。结果如图:

加密解密软件的设计与实现

课程设计任务书 2010—2011学年第二学期 专业:计算机科学与技术学号:080101010 姓名:刘海坤 课程设计名称:计算机网络课程设计 设计题目:加密解密软件的设计与实现 完成期限:自2011 年 6 月21 日至2011 年 6 月26 日共 1 周 设计目的: 本程序设计所采用的就是DES算法,同时利用Java的GUI编程,生成文本对话框,对文件的路径进行选择、提供密钥框、加密和解密按钮。 功能要求:根据DES算法,设计加密解密软件来为各种文件加密解密。 一、设计的任务:根据设计整体需求,本人负责窗体的设计与实现和目标文件 的导入模块。 二、进度安排: 三、主要参考资料: [1] 谢希仁.计算机网络教程.北京: 人民邮电出版社,2006. [2] 耿祥义.Java2使用教程:清华大学出版社,2006. [3] 方敏,张彤.网络应用程序设计.西安:电子科技大学出版社,2005. [4] 黄超.Windows下的网络编程.北京:人民邮电出版社,2003. 指导教师(签字):教研室主任(签字): 批准日期:年月日

摘要 随着计算机的应用和网络技术的不断发展,网络间的通讯量不断的加大,人们的个人信息、网络间的文件传递、电子商务等方面都需要大力的保护,文件加密技术也就随之产生。文件的加密主要是由加密算法实现,加密算法有多种,常见的有RSA、DES、MD5等。本程序设计对文件的加密使用的是DES加密算法。 DES是分块加密的。DES用软件进行解码需要用很长时间,而用硬件解码速度非常快,1977年,人们估计要耗资两千万美元才能建成一个专门计算机用于DES的解密,而且需要12个小时的破解才能得到结果。所以,当时DES被认为是一种十分强壮的加密方法。但今天,只需二十万美元就可以制造一台破译DES的特殊的计算机,所以现在 DES 对要求“强壮”加密的场合已经不再适用了。 Java语言具有简单、安全、可移植、面向对象、健壮、多线程、体系结构中立、解释执行、高性能、分布式和动态等主要特点。利用Java语言中秘密密钥工厂对DES算法的支持,使程序实现文件加密、解密两大功能更简单。 本程序设计所采用的就是DES算法。同时利用Java的GUI编程,生成文本对话框,对文件的路径进行选择、提供密钥框、加密和解密按钮。 使用本程序可以对txt,word等多种文件进行加密解密,使用便捷实用,功能完善,满足了用户对文件安全性的需求。 关键词:JA V A ,DES,加密,解密。

set加解密过程

3.4.5 SE丁协议的加解密过程 1。加密过程 首先,甲方要产生一个数字签名来向乙方证明信息确实是他发出的。他需要执行以 下步骤: ①将所发送信息通过哈希算法,形成信息摘要。 ②使用RSA算法,用私人签名密钥加密信息摘要,形成数字签名。 其次,甲方需要加密信息,使得它在网上传输时没有人能读懂它。 ③甲方通过软件,随机生成对称密钥,作大信息量加密之用,SET缺省的对称密钥 算法是DES o ④甲方用对称密钥加密所要发送的信息(即明文)、数字签名和证书。发送证书的目 的是为了乙方可从证书中得到公开签名密钥,以解开甲方的数字签名。 ⑥到目前为止,甲方可安全地发送信息了,同时也证明了他的身份。但为了使乙方 能读懂这些信息,甲方还需将对称密钥送给乙方。甲方用乙方的公开密钥加密该对称密钥,形成所谓的数字信封。最后甲方将数字信封和加密信息一同发给乙方。 2.解密过程 ①乙方用自己的私人密钥交换密钥将数字信封打开,取出对称密钥。 ②乙方用对称密钥解密信息,得到明文信息、数字签名和甲方的公开签名密钥(从 甲方的证书中获得)。 ③乙方用甲方的公开签名密钥解密数字签名,得到信息摘要。 3.验证过程 到目前为止,乙方还不知道收到的信息是否确实来自甲方,为了证实是甲方发送的信息,乙方还要完成以下步骤: ①将得到的明文信息进行哈希运算,得到新的信息摘要。 ②比较新的信息摘要和原信息摘要(上述解密过程中得到的),如果两者一致,说明 收到的信息确实来自拥有与证书中公开签名密钥成对的私人签名密钥一方,而且信息是完整的。一旦乙方将证书送到发证机构CA认证,就可确定甲方的真实身份和证书是否有效。 3.4.6 SE丁协议分析 SET是基于信用卡的安全支付协议,用于保证信息的机密性、交易方身份的认证和信息的完整性。 (1)信息的机密性 在SET协议中,传输的信息都进行了加密处理,以保证信息的机密性。DES中SET 协议中默认的对称加密算法,用于保护敏感的金融数据;商用数据隐蔽设备CDMF(Commercial Data Mashing Facility)是另一种对称加密算法,用于SET中收单行和持卡者的信息保护它以DES为底层加密算法,采用40位密钥代替DES的64位密钥。为了保证信用卡信息不被商家非法获取,SET采用双重数据签名技术,以提供订购信息和支付消息的机密性,使商家只能看到订购信息,不能看到用户的信用卡信息,而银行只能看到信用卡信息,不能看到订购信息。 (2)数据的完整性 SET使用数字签名来保证数据的完整性。SET使用安全Hash算法SHA-1( Secure Hash Algorithm -1)及RSA来实现数字签名。SHA-1对于任意长度的消息都生成一个160位的消息摘要。如果消息中有一位发生变化,则消息摘要中的数据也会发生变化,两个不同的消息的摘要完全相同的概率几乎是零。 SET协议中还应用双重签名来保证信息的完整性。双重签名的目的是连接两个不同

DES加密解密课程设计报告

D E S加密解密课程设计报 告 Prepared on 22 November 2020

成都信息工程学院课程设计报告 DES算法加密与解密的设计与实现课程名称:密码算法程序设计 学生姓名: 学生学号: 专业班级: 任课教师: XX年 XX 月 XX 日

目录

1背景 DES算法概述 DES(Data Encryption Standard)是由美国IBM公司于20世纪70年代中期的一个密码算(LUCIFER)发展而来,在1977年1月15日,美国国家标准局正式公布实施,并得到了ISO的认可,在过去的20多年时间里,DES被广泛应用于美国联邦和各种商业信息的保密工作中,经受住了各种密码分析和攻击,有很好的安全性。然而,目前DES算法已经被更为安全的Rijndael算法取代,但是DES加密算法还没有被彻底的破解掉,仍是目前使用最为普遍的对称密码算法。所以对DES的研究还有很大价值,在国内DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键的数据保密,如信用卡持卡人的PIN 码加密传输,IC卡与POS机之间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。 DES算法是一种采用传统的代替和置换操作加密的分组密码,明文以64比特为分组,密钥长度为64比特,有效密钥长度是56比特,其中加密密钥有8比特是奇偶校验,DES的加密和解密用的是同一算法,它的安全性依赖于所用的密钥。它首先把需要加密的明文划分为每64比特的二进制的数据块,用56比特有效密钥对64比特二进制数据块进行加密,每次加密可对64比特的明文输入进行16轮的替换和移位后,输出完全不同的64比特密文数据。由于DES算法仅使用最大为64比特的标准算法和逻辑运算,运算速

几种常用的数据加密技术

《Network Security Technology》Experiment Guide Encryption Algorithm Lecture Code: 011184 Experiment Title:加密算法 KeyWords:MD5, PGP, RSA Lecturer:Dong Wang Time:Week 04 Location:Training Building 401 Teaching Audience:09Net1&2 October 10, 2011

实验目的: 1,通过对MD5加密和破解工具的使用,掌握MD5算法的作用并了解其安全性; 2,通过对PGP加密系统的使用,掌握PGP加密算法的作用并了解其安全性; 3,对比MD5和PGP两种加密算法,了解它们的优缺点,并总结对比方法。 实验环境: 2k3一台,XP一台,确保相互ping通; 实验工具:MD5V erify, MD5Crack, RSA-Tools,PGP8.1 MD5加密算法介绍 当前广泛存在有两种加密方式,单向加密和双向加密。双向加密是加密算法中最常用的,它将明文数据加密为密文数据,可以使用一定的算法将密文解密为明文。双向加密适合于隐秘通讯,比如,我们在网上购物的时候,需要向网站提交信用卡密码,我们当然不希望我们的数据直接在网上明文传送,因为这样很可能被别的用户“偷听”,我们希望我们的信用卡密码是通过加密以后,再在网络传送,这样,网站接受到我们的数据以后,通过解密算法就可以得到准确的信用卡账号。 单向加密刚好相反,只能对数据进行加密,也就是说,没有办法对加密以后的数据进行解密。这有什么用处?在实际中的一个应用就是数据库中的用户信息加密,当用户创建一个新的账号或者密码,他的信息不是直接保存到数据库,而是经过一次加密以后再保存,这样,即使这些信息被泄露,也不能立即理解这些信息的真正含义。 MD5就是采用单向加密的加密算法,对于MD5而言,有两个特性是很重要的,第一是任意两段明文数据,加密以后的密文不能是相同的;第二是任意一段明文数据,经过加密以后,其结果必须永远是不变的。前者的意思是不可能有任意两段明文加密以后得到相同的密文,后者的意思是如果我们加密特定的数据,得到的密文一定是相同的。不可恢复性是MD5算法的最大特点。 实验步骤- MD5加密与破解: 1,运行MD5Verify.exe,输入加密内容‘姓名(英字)’,生成MD5密文;

AES算法加解密原理及安全性分析

AES算法加解密原理及安全性分析 刘帅卿 一、AES算法简介 AES算法是高级加密标准算法的简称,其英文名称为Advanced Encryption Standard。该加密标准的出现是因为随着对称密码的发展,以前使用的DES(Data Encryption Standard数据加密标准)算法由于密钥长度较小(56位),已经不适应当今数据加密安全性的要求,因此后来由Joan Daeman和Vincent Rijmen提交的Rijndael算法被提议为AES的最终算法。 AES是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations)和替换(substitutions)输入数据。加之算法本身复杂的加密过程使得该算法成为数据加密领域的主流。 二、AES算法的基本概念 1、有限域(GF) 由于AES算法中的所有运算都是在有限域当中进行的,所以在理解和实现该算法之前先得打好有限域这一基石才行。通常的数学运算都是在实数域中进行,而AES算法则是在有限域中进行,我们可以将有限域看成是有确定边界范围的正整数集合,在该集合当中,任意两个元素之间的运算结果都仍然落在该集合当中,也即满足运算封闭性。 那么如何才能保证这样的“有限性”(也即封闭性)呢? GF(2w)被称之为伽罗华域,是有限域的典型代表。随着w(=4,8,16,…)的取值不同所形成的有限域范围也不同。AES算法中引入了GF域当中对数学运算的基本定义:将两数的加减法定义为两者的异或运算;将两数的乘法定义为多

数据加密技术分析及应用_郭敏杰

第21卷第5期2005年10月 赤峰学院学报(自然科学版) Journal of Chifeng College(Natural Science Edition) Vol.21No.5 Oct.2005数据加密技术分析及应用 郭敏杰 (内蒙古伊泰丹龙药业有限责任公司,内蒙古 赤峰 024000) 摘 要:数据加密技术是实现网络安全的关键技术之一.本文系统地介绍了当前广泛使用的几种数据加密技术:对称密钥加密、公开密钥加密以及混合式加密,对它们进行了客观上的分析并介绍了在网络及其他方面的应用状况. 关键词:数据加密;密钥;网络安全 中图分类号:TP309.7文献标识码:A文章编号:1673-260X(2005)05-0041-01 伴随微机的发展与应用,数据的安全越来越受到高度的重视.数据加密技术就是用来保证信息安全的基本技术之一.数据加密实质是一种数据形式的变换,把数据和信息(称为明文)变换成难以识别和理解的密文并进行传输,同时在接收方进行相应的逆变换(称为解密),从密文中还原出明文,以供本地的信息处理系统使用.加密和解密过程组成为加密系统,明文和密文统称为报文. 1 对称密钥加密算法 对称式密钥加密技术是指加密和解密均采用同一把秘密钥匙,而且通信双方必须都要获得这把钥匙,并保持钥匙的秘密.当给对方发信息时,用自己的加密密钥进行加密,而在接收方收到数据后,用对方所给的密钥进行解密. 对称密钥加密有许多种算法,但所有这些算法都有一个共同的目的———以可还原的方式将明文(未加密的数据)转换为暗文.暗文使用加密密钥编码,对于没有解密密钥的任何人来说它都是没有意义的.由于对称密钥加密在加密和解密时使用相同的密钥,所以这种加密过程的安全性取决于是否有未经授权的人获得了对称密钥.这就是它为什么也叫做机密密钥加密的原因.希望使用对称密钥加密通信的双方,在交换加密数据之前必须先安全地交换密钥. 加密算法中最简单的一种就是“置换表”算法,这种算法也能很好达到加密的需要.每一个数据段(总是一个字节)对应着“置换表”中的一个偏移量,偏移量所对应的值就输出成为加密后的文件.加密程序和解密程序都需要一个这样的“置换表”.事实上,80×86cpu系列就有一个指令`xlat'在硬件级来完成这样的工作.这种加密算法比较简单,加密解密速度都很快,但是一旦这个“置换表”被对方获得,那这个加密方案就完全被识破了.更进一步讲,这种加密算法对于黑客破译来讲是相当直接的,只要找到一个“置换表”就可以了.这种方法在计算机出现之前就己经被广泛的使用. 对这种“置换表”方式的一个改进就是使用2个或者更多的“置换表”,这些表都是基于数据流中字节的位置的,或者基于数据流本身.这时,破译变的更加困难,因为黑客必须正确地做几次变换.通过使用更多的“置换表”,并且按伪随机的方式使用每个表,这种改进的加密方法已经变的很难破译. 2 基于公钥的加密算法 基于公钥的加密算法有两种方式:对称密钥算法和非对称密钥算法.所谓对称密钥加密方法中,对信息的加密和解密都使用相同的密钥,或者可以从一个密钥推导出另一个密钥,而且通信双方都要获得密钥并保持密钥的秘密.当需要对方发送信息时,用自己的加密密钥进行加密,而在接受方收到数据后,用对方所给的密钥进行解密. 非对称密钥算法就是加密解密使用不同的密钥.这种算法的基本原理是利用两个很大的质数相乘所产生的乘积来加密,这两个质数无论哪个先与原文件编码相乘、对文件加密,均可由另一个质数再相乘来解密,但要用一个质数来求出另一个质数则是十分困难的. 非常著名的pgp公钥加密以及rsa加密方法都是非对称加密算法. 3 对称密钥和公钥相结合的加密技术 根据对称密钥和公钥加密特点,在实际应用中将二者相结合,即使用DES/IDE A和RSA结合使用.首先发信者使用DES/IDEA算法用对称钥将明文原信息加密获得密文,然后使用接受的RSA公开钥将对称钥加密获得加密的DES或IDE A密钥,将密文和密钥一起通过网络传送给接收者.接受方接受到密文信息后,先用自己的密钥解密而获得DES或IDEA密钥,再用这个密钥将密文解密而后获得明文原信息.由此起到了对明文信息保密作用. 4 加密技术的应用及发展 随着网络互联技术的发展,信息安全必须系统地从体系结构上加以考虑.ORI(开放系统互联)参考模型的七 (下转第44页) · 41 · DOI:10.13398/https://www.doczj.com/doc/b215533361.html, ki.issn1673-260x.2005.05.024

文件加密系统课程设计

仲恺农业工程学院课程设计 文件加密 姓名孙浩斌 院(系)信息科学与技术学院 专业年级计算机132 学号 指导教师罗慧慧 职称学生 起止时间2015-6-15至2015-6-24 仲恺农业工程学院教务处制 目录

一.课程设计目的和要求 设计目的 有时我们有些资料不希望别人看到,最常用的方法就是加密。对给定的相关文件进行加密可以对文件进行保护,可以防止某些重要信息不被别人所知道甚至窃取。对文件起到保护作用,可以方便用户使用某些只有自己能知道的信息,能够安全保护文件的相关内容几信息不被外流。随着信息社会的到来,人们在享受信息资源所带来的巨大的利益的同时,也面临着信息安全的严峻考验。信息安全已经成为世界性的现实问题,信息安全问题已威胁到国家的政治、经济、军事、文化、意识形态等领域,同时,信息安全问题也是人们能否保护自己的个人隐私的关键。信息安全是社会稳定安全的必要前提条件。通过课程设计,使学生了解高级程序设计语言的结构,逐渐培养学生的编程能力、用计算机解决实际问题的能力,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础。 程序设计的主要任务是要求学生遵循软件开发过程的基本规范,运用结构化程序设计的方法,按照课程设计的题目要求,分析、设计、编写、调试和测试程序及编写设计报告。

本课程设计的目标: 1. 巩固《高级语言程序设计》课程学习的内容和加深学生对基本知识的理解和掌握。 2. 掌握编程和程序调试的基本技能。 3. 掌握软件设计的方法。 4. 提高运用程序设计解决实际问题的能力。 5. 培养独立思考、综合运用所学有关相应知识的能力。 6. 强化上机动手编程能力,闯过理论与实践相结合的难关! 设计要求 1. 分析课程设计题目的要求,根据所要求的程序功能,画出程序的流程图。 2.对系统功能模块进行分析,写出详细设计说明文档。 3.对程序源代码进行调试与测试,使其能正确运行。 4.设计完成的软件要便于操作和使用。 5.设计完成后提交课程设计报告。 设计意义 至今,密码技术是取得信息安全性最有效的一种方法, 密码技术是信息安全的核心技术。通过数据加密,人们可以有效地保证通信线路上的内容不被泄露,而且还可以检验传送信息的完整性。进一步,密码技术可以应用于数字签名、身份认证和信息鉴定,这些应用对于资源存取控制以及其它安全措施是必须而且有效的。相对于防病毒软件和防火墙软件来说,基于密码技术密码类产品、认证类产品份额相对较小,但随着金融、电信、政府等行业信息化建设对于网络安全整体解决方案需求的增加,将会有较大的增长。

十分钟读懂加密技术----对称加密技术

十分钟读懂加密技术(一)----对称加密技术 加密技术包括加密和解密两个运算过程。加密是指将特定可读的信息或数据(明文)转化为不可读的内容(密文)的过程,这个过程一般需要算法和密钥两个元素,具体过程对于不同的加密技术来说有所不同。解密是加密过程的逆运算,是将不可读的密文恢复为明文的过程,这个过程也需要密钥的参与。加密技术依据加密过程和解密过程使用的密钥是否一致可以分为两类:对称加密和非对称加密,也称私钥加密和公钥加密。本文主要介绍对称加密技术。 一、对称加密技术的原理 对称加密(私钥加密),顾名思义,即加密和解密两个过程使用的密钥相同。双方(或多方)使用相同的密钥来对需要传递的信息或数据进行加密或解密以构建一个信息通道从而达到交流传输的目的。 如下图所示,如果Alice想要通过互联网发送信息给Bob,但是又怀疑互联网不是一个安全的信息通道,很可能存在第三方恶意机构会拦截她发送的信息。利用对称加密技术,Alice可以用她事先和Bob商量好的密钥先对要发送的消息进行加密,把消息转化为不可读的密文,再将密文通过互联网发送给Bob。这样即使被第三方拦截,得到的也只是密文,难以解读Alice原本要发送的消息。在Bob接收到密文后,再使用与Alice一致的密钥对密文进行解密,将密文恢复到明文。而当Bob想发送消息给Alice时,他的做法也是一样。在这个消息传递中,只要恶意机构无法得到Alice和Bob使用的密钥,那么便无法轻松地对密文进行解密,这种加密技术就是安全的。

图1 对称加密技术 二、早期的对称加密技术 早期的加密技术都是对称加密技术,最早1可以追溯到古希腊时期斯巴达城使用的斯巴达密码棒(Scytale )2。到了古罗马时期,出现了非常著名的凯撒密码(CaesarCipher )。 斯巴达密码棒是古希腊时期斯巴达城邦主要运用的一种加密工具。其原理是利用木棍对信息字母进行简单地位移,只有将写有信息的长条皮革缠绕在特定直径的木棍上时,才能阅读出信件的真实信息,否则只是一堆无意义的字母组合。 凯撒密码与斯巴达密码棒的原理基本相同,也是对原信息进行简单的数位偏移,将明文转化为密文的加密方式。比如偏移数位是3,那么字母A 就被替换为字母D ,以此类推。这种加密方式据说最早是用于凯撒和将军之间的交流。 1有关于密码学的历史发展,参见Kahn D 在1996年出版的“The Codebreakers ”。该书全面介绍了从4000年前到20世纪有关密码学的重大发展事件。 2 Kelly T. The myth of the skytale[J]. Cryptologia, 1998, 22(3):244-260. 加密 解密 Key Alice Bob 737909666C0288596DBF116 A10DDF14ACE3078D70F7134 E325EFBC497272F6BA

相关主题
文本预览
相关文档 最新文档