网络安全常见的四种加密解密算法.docx

上传人:b****6 文档编号:13108696 上传时间:2023-06-11 格式:DOCX 页数:19 大小:104.67KB
下载 相关 举报
网络安全常见的四种加密解密算法.docx_第1页
第1页 / 共19页
网络安全常见的四种加密解密算法.docx_第2页
第2页 / 共19页
网络安全常见的四种加密解密算法.docx_第3页
第3页 / 共19页
网络安全常见的四种加密解密算法.docx_第4页
第4页 / 共19页
网络安全常见的四种加密解密算法.docx_第5页
第5页 / 共19页
网络安全常见的四种加密解密算法.docx_第6页
第6页 / 共19页
网络安全常见的四种加密解密算法.docx_第7页
第7页 / 共19页
网络安全常见的四种加密解密算法.docx_第8页
第8页 / 共19页
网络安全常见的四种加密解密算法.docx_第9页
第9页 / 共19页
网络安全常见的四种加密解密算法.docx_第10页
第10页 / 共19页
网络安全常见的四种加密解密算法.docx_第11页
第11页 / 共19页
网络安全常见的四种加密解密算法.docx_第12页
第12页 / 共19页
网络安全常见的四种加密解密算法.docx_第13页
第13页 / 共19页
网络安全常见的四种加密解密算法.docx_第14页
第14页 / 共19页
网络安全常见的四种加密解密算法.docx_第15页
第15页 / 共19页
网络安全常见的四种加密解密算法.docx_第16页
第16页 / 共19页
网络安全常见的四种加密解密算法.docx_第17页
第17页 / 共19页
网络安全常见的四种加密解密算法.docx_第18页
第18页 / 共19页
网络安全常见的四种加密解密算法.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

网络安全常见的四种加密解密算法.docx

《网络安全常见的四种加密解密算法.docx》由会员分享,可在线阅读,更多相关《网络安全常见的四种加密解密算法.docx(19页珍藏版)》请在冰点文库上搜索。

网络安全常见的四种加密解密算法.docx

网络安全常见的四种加密解密算法

packagemima;

importjava.io.BufferedReader;

importjava.io.IOException;

importjava.io.InputStreamReader;

importjava.util.Scanner;

publicclassMainer{

StringBufferMStr=newStringBuffer("");//加密字符串

StringBufferCStr=newStringBuffer("");//解密字符串

publicstaticvoidmain(String[]args){

System.out.print("请输入密钥:

");

Scanners=newScanner(System.in);

intkey=s.nextInt()%26;//%26的意义是获取密钥的偏移值

Mainerks=newMainer();

ks.E(key);//加密

ks.D(key);//解密

}

/**

*加密公式

*/

voidE(intk){

try{

System.out.println("请输入一段明文:

");

charb[];

BufferedReaderbr2=newBufferedReader(newInputStreamReader(System.in));

Stringstr2=br2.readLine();

b=str2.toCharArray();

charch='';

for(inti=0;i

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

ch=(char)((b[i]-'a'+k)%26+'a');

}

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

ch=(char)((b[i]-'A'+k)%26+'A');

}

if(b[i]>='0'&&b[i]<='9')

{

if(b[i]+k%10<='9')

{

ch=(char)(b[i]+k%10);//当提取的字符在9之前的n位时

}

else

{ch=(char)('0'+((b[i]-('9'-k)-1)%10));//孤立出来的n个字符

}ch=b[i];}

MStr.append(ch);//拼接字符串

}

System.out.println("密文为:

"+MStr+"密匙为:

"+k);

}catch(IOExceptione){

System.out.println(e.getMessage());

}

}

/**

*解密公式

*/

voidD(intk){

try{

charb[];

b=MStr.toString().toCharArray();

charch='';

for(inti=0;i

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

ch=(char)((b[i]-'a'+26-k)%26+'a');

}

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

ch=(char)((b[i]-'A'+26-k)%26+'A');

}

if(b[i]>='0'&&b[i]<='9'){

if(b[i]-k%10>='0')//当提取的字符在0之前的n个时

{ch=(char)(b[i]-k%10);}

else{

ch=(char)('9'-((b[i]-(k-'0')-1)%10));//操作孤立出来的n个字符

}

ch=b[i];}

CStr.append(ch);//拼接字符串

}

System.out.println("明文:

"+CStr);

}catch(Exceptione){

System.out.println(e.getMessage());

}

}

}

publicstaticvoidmain(String[]args){

System.out.print("1.移位加密;2移位解密");

Scannerresult=newScanner(System.in);

intr=result.nextInt();

System.out.print("请输入密钥:

");

Scanners=newScanner(System.in);

intkey=s.nextInt()%26;//%26的意义是获取密钥的偏移值

yiweiks=newyiwei();

if(r==1){ks.E(key);}//加密

elseif(r==2)

{ks.D(key);}//解密

elseSystem.out.print("请选择正确选项(1或2)");

}

移位:

packagemima;

importjava.io.BufferedReader;

importjava.io.IOException;

importjava.io.InputStreamReader;

importjava.util.Scanner;

publicclassMainer{

StringBufferMStr=newStringBuffer("");//加密字符串

StringBufferCStr=newStringBuffer("");//解密字符串

publicstaticvoidmain(String[]args){

System.out.print("请输入密钥:

");

Scanners=newScanner(System.in);

intkey=s.nextInt()%26;//%26的意义是获取密钥的偏移值

Mainerks=newMainer();

ks.E(key);//加密

ks.D(key);//解密

}

/**

*加密公式

*/

voidE(intk){

try{

System.out.println("请输入一段明文:

");

charb[];

BufferedReaderbr2=newBufferedReader(newInputStreamReader(System.in));

Stringstr2=br2.readLine();

b=str2.toCharArray();

charch='';

for(inti=0;i

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

ch=(char)((b[i]-'a'+k)%26+'a');

}

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

ch=(char)((b[i]-'A'+k)%26+'A');

}

if(b[i]>='0'&&b[i]<='9')

{

if(b[i]+k%10<='9')

{

ch=(char)(b[i]+k%10);//当提取的字符在9之前的n位时

}

else

{ch=(char)('0'+((b[i]-('9'-k)-1)%10));//孤立出来的n个字符

}}

MStr.append(ch);//拼接字符串

}

System.out.println("密文为:

"+MStr+"密匙为:

"+k);

}catch(IOExceptione){

System.out.println(e.getMessage());

}

}

/**

*解密公式

*/

voidD(intk){

try{

charb[];

b=MStr.toString().toCharArray();

charch='';

for(inti=0;i

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

ch=(char)((b[i]-'a'+26-k)%26+'a');

}

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

ch=(char)((b[i]-'A'+26-k)%26+'A');

}

if(b[i]>='0'&&b[i]<='9'){

if(b[i]-k%10>='0')//当提取的字符在0之前的n个时

{ch=(char)(b[i]-k%10);}

else{

ch=(char)('9'-((b[i]-(k-'0')-1)%10));//操作孤立出来的n个字符

}}

CStr.append(ch);//拼接字符串

}

System.out.println("明文:

"+CStr);

}catch(Exceptione){

System.out.println(e.getMessage());

}

}

}

vigenere

packagemima;

importjava.util.Scanner;

publicclassvigenere{

publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

@SuppressWarnings("resource")

Scannerinput=newScanner(System.in);

System.out.println("输入明文,要求用小写字母,不要打空格");

Strings=input.nextLine();//输入明文,要求用小写字母,不要打空格

System.out.println("输入秘钥,要求用小写字母,不要打空格");

Strings2=input.nextLine();//输入秘钥,要求用小写字母,不要打空格

Strings3=encrypt(s,s2);//使用加密算法,得到密文

System.out.println(s3);

Strings4=deciphering(s3,s2);//使用解密算法,实现解密

System.out.println(s4);

}

publicstaticStringencrypt(Strings1,Strings2){

char[]ch1=s1.toCharArray();

intlength=ch1.length;//明文长度

int[]in1=newint[length];

for(inti=0;i

in1[i]=ch1[i]-97;//利用ascii变成0-25数字

}

char[]ch2=s2.toCharArray();

intlength2=ch2.length;//明文长度

int[]in2=newint[length2];

for(inti=0;i

in2[i]=ch2[i]-97;//利用ascii变成0-25数字

}

intj=0;

for(inti=0;i

if(j==length2)

j=0;

in1[i]=(in1[i]+in2[j])%26;//加密算法,mod26

j++;

}

for(inti=0;i

ch1[i]=(char)(in1[i]+97);//将数字变成字母

}

returnString.valueOf(ch1);//将字符串数字变成String类型的字符串,返回

}

publicstaticStringdeciphering(Strings1,Strings2){

char[]ch1=s1.toCharArray();

intlength=ch1.length;//密文长度

int[]in1=newint[length];

for(inti=0;i

in1[i]=ch1[i]-97;//利用ascii变成0-25数字

}

char[]ch2=s2.toCharArray();

intlength2=ch2.length;//明文长度

int[]in2=newint[length2];

for(inti=0;i

in2[i]=ch2[i]-97;//利用ascii变成0-25数字

}

intj=0;

for(inti=0;i

if(j==length2)

j=0;

in1[i]=(in1[i]-in2[j])%26;//解密算法,mod26

if(in1[i]<0)

in1[i]+=26;//如果得到负数,则加上26转正

j++;

}

for(inti=0;i

ch1[i]=(char)(in1[i]+97);//将数字变成字母

}

returnString.valueOf(ch1);//将字符串数字变成String类型的字符串,返回

}

}

仿射加密:

packagemima;

importjava.util.Scanner;

publicclassfangshe{

privatestaticfinalintnumber=26;

/*

*本代码是仿射密码的加密与解密的实现,内含用欧几里得扩展算法求一个数对于26的逆,

*encrypt函数实现加密,deciphering函数实现解密,Euclid函数实现用欧几里得算法求一个数对于26的逆

*/

publicstaticvoidmain(String[]args){

@SuppressWarnings("resource")

Scannerinput=newScanner(System.in);

System.out.println("请输入明文,要求用小写字母,不要打空格");

Strings=input.nextLine();//输入明文,要求用小写字母,不要打空格

System.out.println("请输入放射密码里面的a");

inta=input.nextInt();//输入放射密码里面的a

System.out.println("请输入放射密码里面的b");

intb=input.nextInt();//输入放射密码里面的b

Stringch2=encrypt(s,a,b);//调用加密函数,得到密文

System.out.println(ch2);

//deciphering

inta2=Euclid(a,number);//采用欧几里得算法计算a的逆。

定义为a2;

System.out.println("a2="+a2);

Stringch3=deciphering(ch2,a2,b);//调用解密算法,得到明文

System.out.println("ch3="+ch3);

}

publicstaticStringencrypt(Strings,inta,intb){//加密函数的实现

char[]ch=s.toCharArray();

intlength=ch.length;//明文长度

int[]in=newint[length];

for(inti=0;i

in[i]=ch[i]-97;//利用ascii变成0-25数字

}

for(inti=0;i

in[i]=(in[i]*a+b)%26;//加密算法

}

for(inti=0;i

ch[i]=(char)(in[i]+97);//将数字变成字母

}

returnString.valueOf(ch);//将字符串数字变成String类型的字符串,返回

}

publicstaticintEuclid(inta,intmunber){//求a的逆的实现

inta1=1,a2=0,a3=number;

intb1=0,b2=1,b3=a;

intt1,t2,t3;

intq;

q=a3/b3;

System.out.println("q="+q);

t1=a1-q*b1;

t2=a2-q*b2;

t3=a3-q*b3;

while(t3!

=1){

a1=b1;

a2=b2;

a3=b3;

b1=t1;

b2=t2;

b3=t3;

q=a3/b3;

t1=a1-q*b1;

t2=a2-q*b2;

t3=a3-q*b3;

}

inta4=t2%munber;

if(a4<0)

a4+=munber;//如果a4小于0,要加上26变正

returna4;//返回a的逆

}

publicstaticStringdeciphering(Strings,inta,intb){//解密的实现

char[]ch=s.toCharArray();

intlength=ch.length;//密文长度

int[]in=newint[length];

for(inti=0;i

in[i]=ch[i]-97;//利用ascii变成0-25数字

}

for(inti=0;i

in[i]=((in[i]-b)*a)%26;//解密算法

if(in[i]<0)

in[i]+=26;

}

for(inti=0;i

ch[i]=(char)(in[i]+97);//将数字变成字母

}

returnString.valueOf(ch);//将字符串数字变成String类型的字符串,返回

}

}

改版:

packagemima;

importjava.util.Scanner;

publicclassfangshe{

privatestaticfinalintnumber=26;

publicstaticvoidmain(String[]args){

Scannerinput=newScanner(System.in);

System.out.println("请输入明文");

Strings=input.nextLine();//输入明文,要求用小写字母,不要打空格

System.out.println("请输入密钥k1");

inta=input.nextInt();//输入密钥k1

if(gcd(a,26)!

=1){System.out.println("密钥错误");}

else{System.out.println("请输入密钥k2");

intb=input.nextInt();//输入密钥k2

if(b>25||b<0){System.out.println("密钥错误");}

else{

Stringch2=encrypt(s,a,b);//调用加密函数,得到密文

System.out.println("密文为:

"+ch2);

//deciphering

inta2=Euclid(a,number);//采用欧几里得算法计算a的逆。

定义为a2;

System.out.println("k1的逆="+a2);

Stringch3=deciphering(ch2,a2,b);//调用解密算法,得到明文

System.out.println("明文为:

"+ch3);

}}

}

publicstati

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2