一、实验报告封面

课程: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实践的更多相关文章

  1. 20145213《Java程序设计》实验三敏捷开发与XP实践

    20145213<Java程序设计>实验三敏捷开发与XP实践 实验要求 1.XP基础 2.XP核心实践 3.相关工具 实验内容 1.敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法 ...

  2. 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  3. JAVA课程实验报告 实验三 敏捷开发与XP实践

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

  4. 20145225《Java程序设计》 实验三 "敏捷开发与XP实践"

    20145225<Java程序设计> 实验三 "敏捷开发与XP实践" 实验报告 实验内容 使用 git 上传代码 使用 git 相互更改代码 实现代码的重载 git 上 ...

  5. 20145215实验三 敏捷开发与XP实践

    20145215实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.软 ...

  6. 20145325张梓靖 实验三 "敏捷开发与XP实践"

    20145325张梓靖 实验三 "敏捷开发与XP实践" 程序设计过程 实验内容 使用 git 上传代码 git上传中遇到的问题 使用 git 相互更改代码 实现代码的重构 git ...

  7. 20162311 实验三 敏捷开发与XP实践 实验报告

    20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...

  8. 2018-2019-20175205 实验三敏捷开发与XP实践《Java开发环境的熟悉》实验报告

    2018-2019-20175205 实验三敏捷开发与XP实践<Java开发环境的熟悉>实验报告 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)>&l ...

  9. 20175314 实验三 敏捷开发与XP实践

    20175314 实验二 Java面向对象程序设计 一.实验内容 XP基础 XP核心实践 相关工具 二.实验步骤 (一)代码格式化 创建"175314.exp3"项目,在该项目下创 ...

随机推荐

  1. CentOS7.4安装部署KVM虚拟机

    命令:virt-manager 可以查看已经安装的虚拟机 参考文档:1.https://blog.csdn.net/qq_39452428/article/details/80781403

  2. eclipse常用快捷键和插件

    1.快捷键 找实现类  ctrl +T 抽取為方法:alt+shift+M (Method) 方法返回值 ctrl+1 enter 2.在做Java项目的时候如何把第三方的jar包一起打包成jar文件 ...

  3. 虚拟机安装CentOS配置静态IP

    在VMware中安装Linux虚拟机后(比如CentOS6.*),不能访问网络,需要配置静态IP.虚拟机中推荐使用NET模式进行网络连接,在虚拟机的工具栏点击编辑>虚拟网络编辑器>NET模 ...

  4. 【转】gcc命令中参数c和o混合使用的详解

    gcc -c a.c  编译成目标文件a.o  gcc a.c  生成执行文件a.exe  gcc -o a -c a.c    编译成目标文件a  gcc -o a  a.c    生成执行文件a. ...

  5. 范围for语句

    C++11 新标准引入了一种更简单的for语句,这种语句可以遍历容器或其他序列的所有元素.范围for语句(range for statement)的语法形式是: for (declaration : ...

  6. python 创建二维数组

    myList = [([0] * 3) for i in range(4)] myList[0][1] = 1 myList[1].append(2) print myList /usr/bin/py ...

  7. java操作redis之按照关键字删除缓存数据

    思路: 1.链接redis数据库,连接成功2.js.del(key),按照指定的key进行删除,封装删除方法3.js.keys("*"),获取所有键keys的集合,对set集合进行 ...

  8. IP保留地址

    保留地址的网络只能在内部进行通信,而不能与其他网络互连.因为本网络中的保留地址同样也可能被其它网络使用,如果进行网络互连,那么寻找路由时就会因为地址的不唯一而出现问题. 但是这些使用保留地址的网络可以 ...

  9. Spring通过SchedulerFactoryBean实现调度任务的配置(定时器)

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  10. Codeforces 833D Red-Black Cobweb [点分治]

    洛谷 Codeforces 思路 看到树上路径的统计,容易想到点分治. 虽然只有一个限制,但这个限制比较麻烦,我们把它拆成两个. 设黑边有\(a\)条,白边有\(b\)条,那么有 \[ 2a\geq ...