网络安全常见的四种加密解密算法.docx
- 文档编号:25668469
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:19
- 大小:104.67KB
网络安全常见的四种加密解密算法.docx
《网络安全常见的四种加密解密算法.docx》由会员分享,可在线阅读,更多相关《网络安全常见的四种加密解密算法.docx(19页珍藏版)》请在冰豆网上搜索。
网络安全常见的四种加密解密算法
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络安全 常见 加密 解密 算法