20165323 实验三 敏捷开发与XP实践
一、实验报告封面
课程:Java程序设计 班级:1653班 姓名:杨金川 学号:20165323
指导教师:娄嘉鹏 实验日期:2018年4月28日
实验时间:13:45 - 15:25 实验序号:实验三
实验名称:敏捷开发与XP实践
实验内容:
1、XP基础
2、XP核心实践
3、相关工具
实验要求:
1、没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程;
2、完成实验、撰写实验报告,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等);
3、实验报告中统计自己的PSP(Personal Software Process)时间;
4、严禁抄袭。
二、实验步骤
(1)安装alibaba 插件,解决代码中的规范问题。在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能。
运行截图:
修改前:
修改后:
code菜单中功能的应用
Override Methods(Ctrl+O):重载基本类的方法;
Implement Methods(Ctrl+I):完成当前类 implements 的(或者抽象基本类的)接口的方法;
Generate(Alt+Insert):创建类里面任何字段的 getter 与 setter 方法;
Surround With(Ctrl+Alt+T):使用if-else、try-catch、do-while等包装代码段;
我觉得好用的功能是Surround With
(2)在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容";git push;
结果截图:
(3)实验三 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA
完成重构内容的练习,下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接。
知识点:
结果截图:
原代码:
修改之后:
(4)以结对的方式完成Java密码学相关内容的学习,结合重构、git、代码标准等
知识点:
Java安全体系结构总共分为4个部分:
1、JCA( Java Cryptography Architecture, Java加密体系结构):JCA提供基本的加密框架, 如证书、 数字签名、消息摘要和密钥对产生器。
2、JCE( Java Cryptography Extension, Java加密扩展包):JCE在JCA的基础上作了扩展, 提供了各种加密算法、 消息摘要算法和密钥管理等功能。JCE的实现主要在javax.crypto包( 及其子包) 中
3、JSSE( Java Secure Sockets Extension, Java安全套接字扩展包):JSSE提供了基于SSL( Secure Sockets Layer,安全套接字层) 的加密功能。 在网络的传输过程中, 信息会经过多个主机(很有可能其中一台就被窃听) , 最终传送给接收者, 这是不安全的。这种确保网络通信安全的服务就是由JSSE来提供的。
4、JAAS( Java Authentication and Authentication Service, Java鉴别与安全服务):JAAS提供了在Java平台上进行用户身份鉴别的功能。
我们小组此次实现了希尔密码
import java.util.Scanner;
public class Hill {
static int[][] key = {
{17, 17, 5},
{21, 18, 21},
{2, 2, 19},
};
static int[] temp = {
1, 0, 0,
};
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in
);
Hill hill = new Hill();
System.out.println("请输入需要希尔密码加密的明文:");
String plainttext = input.nextLine();
String ciphertext = hill.getEncrypttext(plainttext.toUpperCase());
System.out.println(ciphertext);
System.out.println();
System.out.println("下面将上面的密文重新通过加密密钥来解密");
String plainttext2 = hill.getDncrypttext(ciphertext);
System.out.println("解密后的明文为:");
System.out.println(plainttext2.toLowerCase());
input.close();
}
private String getDncrypttext(String ciphertext) {
// TODO Auto-generated method stub
int[][] key2 = new int[key.length][key[0].length];
key2 = getReverseMartrix(key);
System.out.println("加密密钥逆矩阵为:");
showMartrix(key2);
return getDecrypttext(key2, ciphertext);
}
private String getDecrypttext(int[][] key2, String ciphertext) {
// TODO Auto-generated method stub
int temp1, temp2, temp3;
StringBuilder plainttext = new StringBuilder();
for(int i=0; i<ciphertext.length(); i+=3) {
temp1 = key2[0][0]*(ciphertext.charAt(i) - 'A')
+ key2[0][1]*(ciphertext.charAt(i+1) - 'A')
+ key2[0][2]*(ciphertext.charAt(i+2) - 'A');
temp2 = key2[1][0]*(ciphertext.charAt(i) - 'A')
+ key2[1][1]*(ciphertext.charAt(i+1) - 'A')
+ key2[1][2]*(ciphertext.charAt(i+2) - 'A');
temp3 = key2[2][0]*(ciphertext.charAt(i) - 'A')
+ key2[2][1]*(ciphertext.charAt(i+1) - 'A')
+ key2[2][2]*(ciphertext.charAt(i+2) - 'A');
plainttext.append((char)('A'+temp1%26));
plainttext.append((char)('A'+temp2%26));
plainttext.append((char)('A'+temp3%26));
}
return plainttext.toString();
}
private void showMartrix(int[][] key2) {
for(int i=0; i<key2.length; i++) {
for(int j=0; j<key2[0].length; j++) {
System.out.print(key2[i][j]+ " ");
}
System.out.println();
}
}
private int[][] getReverseMartrix(int[][] key2) {
// TODO Auto-generated method stub
int[][] key = new int[key2.length][key2[0].length];
for(int num=0; num<3; num++)
for(int i=0; i<26; i++)
for(int j=0; j<26; j++)
for(int k=0; k<26; k++) {
if((i*17+j*21+k*2)%26 == temp[num%3]
&& ((i*17+j*18+k*2)%26 == temp[(num+2)%3])
&& ((i*5+j*21+k*19)%26 == temp[(num+1)%3])) {
key[num][0] = i;
key[num][1] = j;
key[num][2] = k;
}
}
return key;
}
private String getEncrypttext(String plainttext) {
// TODO Auto-generated method stub
int temp1 = 0, temp2, temp3;
StringBuilder cipertext = new StringBuilder();
for(int i=0; i<plainttext.length(); i+=3) {
temp1 = key[0][0]*(plainttext.charAt(i) - 'A')
+ key[0][1]*(plainttext.charAt(i+1) - 'A')
+ key[0][2]*(plainttext.charAt(i+2) - 'A');
temp2 = key[1][0]*(plainttext.charAt(i) - 'A')
+ key[1][1]*(plainttext.charAt(i+1) - 'A')
+ key[1][2]*(plainttext.charAt(i+2) - 'A');
temp3 = key[2][0]*(plainttext.charAt(i) - 'A')
+ key[2][1]*(plainttext.charAt(i+1) - 'A')
+ key[2][2]*(plainttext.charAt(i+2) - 'A');
cipertext.append((char)('A'+temp1%26));
cipertext.append((char)('A'+temp2%26));
cipertext.append((char)('A'+temp3%26));
}
return cipertext.toString();
}
}
结果截图:
实验总结
本次实验让我了解了代码规范性的重要性,同时结对编程也是我们小组合作得更加默契,对我们受益匪浅
20165323 实验三 敏捷开发与XP实践的更多相关文章
- 20145213《Java程序设计》实验三敏捷开发与XP实践
20145213<Java程序设计>实验三敏捷开发与XP实践 实验要求 1.XP基础 2.XP核心实践 3.相关工具 实验内容 1.敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法 ...
- 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
- JAVA课程实验报告 实验三 敏捷开发与XP实践
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:韩玉琪 学号:20135317 成绩: 指导教师:娄嘉 ...
- 20145225《Java程序设计》 实验三 "敏捷开发与XP实践"
20145225<Java程序设计> 实验三 "敏捷开发与XP实践" 实验报告 实验内容 使用 git 上传代码 使用 git 相互更改代码 实现代码的重载 git 上 ...
- 20145215实验三 敏捷开发与XP实践
20145215实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.软 ...
- 20145325张梓靖 实验三 "敏捷开发与XP实践"
20145325张梓靖 实验三 "敏捷开发与XP实践" 程序设计过程 实验内容 使用 git 上传代码 git上传中遇到的问题 使用 git 相互更改代码 实现代码的重构 git ...
- 20162311 实验三 敏捷开发与XP实践 实验报告
20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...
- 2018-2019-20175205 实验三敏捷开发与XP实践《Java开发环境的熟悉》实验报告
2018-2019-20175205 实验三敏捷开发与XP实践<Java开发环境的熟悉>实验报告 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)>&l ...
- 20175314 实验三 敏捷开发与XP实践
20175314 实验二 Java面向对象程序设计 一.实验内容 XP基础 XP核心实践 相关工具 二.实验步骤 (一)代码格式化 创建"175314.exp3"项目,在该项目下创 ...
随机推荐
- [Docker]CentOS7下Docker安装教程
想要倒腾Kubernetes的话,第一步就是要会安装Docker,这篇文章讲一讲过程 安装步骤 检查内核版本,必须是3.10以上 uname -r 安装Docker yum -y install do ...
- SSH命令行管理文件
1.从服务器上下载文件 ssh root@13.111.122.133 2.从服务器上下载文件 scp username@servername:/path/filename /var/www/loca ...
- [转]python3字符串与文本处理
转自:python3字符串与文本处理 阅读目录 1.针对任意多的分隔符拆分字符串 2.在字符串的开头或结尾处做文本匹配 3.利用shell通配符做字符串匹配 4.文本模式的匹配和查找 5.查找和替换文 ...
- python中“*”、"*args"、"kwargs"三种用法
参考链接:https://www.cnblogs.com/cwind/p/8996000.html 注意的是: (1)"*"符号的用法很类似C++中的指针,针对列表; (2)&qu ...
- Python调用subprocess.Popen卡死的解决方案
转载自:https://www.cnblogs.com/keke-xiaoxiami/p/7875009.html 在Python中,调用:subprocess.Popen(cmd, stdout = ...
- Unity3D RTS游戏中帧同步实现
帧同步技术是早期RTS游戏常用的一种同步技术,本篇文章要给大家介绍的是RTX游戏中帧同步实现,帧同步是一种前后端数据同步的方式,一般应用于对实时性要求很高的网络游戏,想要了解更多帧同步的知识,继续往下 ...
- WebSocket参考
websocker是一种网页和服务端建立tcp全双工通信的技术,可以不再让页面进行向服务器发送轮询请求. 需要注意使用的场景,如果建立的tcp过多的话,会对服务器有很大压力. WebSocket前后台 ...
- Linux系统基础优化及常用命令
Linux基础系统优化 引言没有,只有一张图. Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. ifconfig 查询.设置网卡和 ...
- python 基础 three day
本节主要内容: 一. python基本数据类型有哪些? 1. int ==> 整数.主要用来进行数学计算. 2. str ==> 字符串,可以保存少量数据并进行相应的操作 3. boo ...
- [POSIX]文件系统(概述)
1.文件名由除系统目录分隔符(unix是/,windows是\)和空字符“\0”外的任意ASCII字符组成,现代系统很多还可以包含UNICODE字符,但是还是推荐使用传统的ASCII码命名. 2.目录 ...