记录--信息安全实验--加密

记录–信息安全实验–加密

一、项目设计目标与要求
1.利用凯撒密码的加密方法编写算法;
1.1、根据对凯撒密码的介绍,自己创建明文信息,编写相应密码算法的实现程序,实现加密和解密操作。(编程语言自选)
1.2、提取出要加密的字符串、密钥,将字符串中毎个字符都取出并进行移位,以实现加密和解密的功能。

2.利用CAP4运算软件比较结果;
2.2、与CAP4的运算结果进行比较,验证你的实验结果是否正确。

  1. 通过完成实验进一步理解信息加密算法的概念;

密码是实现秘密通讯的主要手段,是隐蔽语言、文字、图象的特种符号。凡是用特种符号按照通讯双方约定的方法把电文的原形隐蔽起来,不为第三者所识别的通讯方式称为密码通讯。在计算机通讯中,采用密码技术将信息隐蔽起来,再将隐蔽后的信息传输出去,使信息在传输过程中即使被窃取或载获,窃取者也不能了解信息的内容,从而保证信息传输的安全。

二、项目设计内容
2.1、凯撒密码:凯撒密码是罗马扩张时期朱利斯·凯撒( Julius Caesar)创造的,用于加密通过信使传递的作战命令。加密的过程是将字母表中的字母移动一定位置,从而实现文本的加密。如果将字母表中的字母向右移动2位,则字母A将变为C,字母B将变为D,以此类推,一个明文字符串Hello就被加密成Jgnnq。之后解密,就会返回原字符串。这里,移动的位数2是加密和解密所用的密钥。

2.2、利用凯撒密码设计加密算法:

我们用java代码来实现一个简单的加密算法:

package kaisa1;

public class Kaisapwd {
public static void main(String[] args) {
char str[]= {‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,‘h’,‘i’,‘j’,
‘k’,‘l’,‘m’,‘n’,‘o’,‘p’,‘q’,‘r’,‘s’,‘t’,‘u’,‘v’,‘w’,‘x’,‘y’,‘z’};
for(char out:str) {
System.out.print(out+" “);
}
for(int i=0;i<26;i++) {
if(i<23) {
str[i]+=3;
}else {
str[i]-=23;
}
}
System.out.println(”\n");
for(char out:str) {
System.out.print(out+" ");
}
}
}

我们输入字母表,下面按照后移三位的密钥输出结果:

在这里插入图片描述

2.3、利用凯撒密码设计解密算法:

package kaisa1;

public class Kaisapwdoff {
public static void main(String[] args) {
char str[]= {‘d’,‘e’,‘f’,‘g’,‘h’,‘i’,‘j’,‘k’,‘l’,
‘m’,‘n’,‘o’,‘p’,‘q’,‘r’,‘s’,‘t’,‘u’,‘v’,
‘w’,‘x’,‘y’,‘z’,‘a’,‘b’,‘c’};
for(char out:str) {
System.out.print(out+" “);
}
for(int i=0;i<26;i++) {
if(i<23) {
str[i]-=3;
}else {
str[i]+=23;
}
}
System.out.println(”\n");
for(char out:str) {
System.out.print(out+" ");
}
}
}

输出结果:
在这里插入图片描述

2.4、利用CAP4的运算结果进行比较,验证你的实验结果是否正确:

在这里插入图片描述

三、项目设计过程
1.需求分析
我们需要实现两个步骤:第一是通过算法实现凯撒密码的加密与解密;
第二是用CAP4来验证我们输入输出是否正确。

2.实现原理图(模块图)
在这里插入图片描述

3.主要实验步骤与技术分析
3.1 编写算法(基于凯撒密码)
package kaisa1;

import java.util.Scanner;

public class Kaisaonoff {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(“欢迎使用凯撒密码加密解密器!!”);
System.out.println(“A.加密,B.解密,请选择一个”);
//创建Scanner对象
Scanner c=new Scanner(System.in);
//获取字符串
String s1=c.nextLine();
//判断变量s1与A是否相等,忽略大小
if(s1.equalsIgnoreCase(“A”)) {

			System.out.println("请输入明文:");
			//获取输入的内容
			Scanner sc=new Scanner(System.in);
			String s=sc.nextLine();
			//输入需要往后推算的位数(比如:3==》表示往后推算三位)
			System.out.println("请输入密钥:");
			
			Scanner sc1=new Scanner(System.in);
			//将下一输入项转换成整型
			int key=sc1.nextInt();
			//调用加密算法
			Encryption(s,key);
		}else if(s1.equalsIgnoreCase("B")) {
			
			System.out.println("请输入密文:");
			//获取输入的内容
			Scanner sc=new Scanner(System.in);
			String s=sc.nextLine();
			//输入加密时往后推算的位数(比如:3==》表示往后推算三位)
			System.out.println("请输入密钥:");
			
			Scanner sc1=new Scanner(System.in);
			int key=sc1.nextInt();
			//调用解密算法
			Decrypt(s,key);
		}
	}
	//解密算法
	public static void Decrypt(String str, int n) {
		// TODO Auto-generated method stub
		//解密算法
		int k=Integer.parseInt("-"+n);
		String string="";
		for(int i=0;i<str.length();i++) {
			char c=str.charAt(i);
			//如果字符串中的某个字符是小写字母
			if(c>='a'&&c<='z')
			{
				//移动key%26位
				c+=k%26;
				if(c<'a')
					//向左超界
					c+=26;
				if(c>'z')
					//向右超界
					c-=26;
				//如果字符串中的某个字符是大写字母
			}else if(c>='A'&&c<='Z')
			{
				//移动key%26位
				c+=k%26;
				if(c<'A')
					//向左超界
					c+=26;
				if(c>'Z')
					//向右超界
					c-=26;
			}
			//将解密后的字符连成字符串
			string +=c;
		}
		System.out.println(str+" 解密后为:"+string);		
	}

	public static void Encryption(String str, int k) {
		// TODO Auto-generated method stub
		//加密算法
		String string="";
		for(int i=0;i<str.length();i++) {
			char c=str.charAt(i);
			//如果字符串中的某个字符是小写字母
			if(c>='a'&&c<='z')
			{
				//移动key%26位
				c+=k%26;
				if(c<'a')
					//向左超界
					c+=26;
				if(c>'z')
					//向右超界
					c-=26;
				//如果字符串中的某个字符是大写字母
			}else if(c>='A'&&c<='Z')
			{
				//移动key%26位
				c+=k%26;
				if(c<'A')
					//向左超界
					c+=26;
				if(c>'Z')
					//向右超界
					c-=26;
			}
			//将解密后的字符连成字符串
			string +=c;
		}
		System.out.println(str+" 加密后为:"+string);
	}
}

3.2 代码测试
(1)运行代码:
在这里插入图片描述

(2)首先完成明文的加密(我们用i have a dream that one day这个明文来进行测试):
在这里插入图片描述

(3)密钥表示往后推的位数,得到加密后的结果:l kdyh d guhdp wkdw rqh gdb(我们这里选择3位):
在这里插入图片描述

3.3 CAP4测试
(1)打开软件:

在这里插入图片描述
在这里插入图片描述

(2)我们在上面的方框中输入需要测试的明文数据(i have a dream that one day),然后选择Cipers,在下拉框中选择simper shift:
在这里插入图片描述

(3)调出一个对话框,框中输入密钥,也就是后移的位数,在点击加密按钮(Encipher):
在这里插入图片描述
在这里插入图片描述

在下面加密好的密文框中我们可以看到结果是:lkdyhdguhdpwkdwrqhgdb,与我们之前代码得到的结果一致。

四、项目设计总结

通过此次实验,我学会了基本的通过凯撒密码实现信息加密的方法,了解了密码是实现秘密通讯的主要手段,是隐蔽语言、文字、图象的特种符号。凡是用特种符号按照通讯双方约定的方法把电文的原形隐蔽起来,不为第三者所识别的通讯方式称为密码通讯。在计算机通讯中,采用密码技术将信息隐蔽起来,再将隐蔽后的信息传输出去,使信息在传输过程中即使被窃取或载获,窃取者也不能了解信息的内容,从而保证信息传输的安全。
在实验中我使用JAVA代码编写了一个完整的凯撒密码加密和解密的算法,要求提取出要加密的字符串、密钥,将字符串中毎个字符都取出并进行移位,以实现加密和解密的功能算法得出的测试结果与CAP4软件结果比对一致。
通过这个实验我也进一步提高了动手能力,在实验中也重新复习了java的一些性质和简单的算法,实践出真知。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值