实验报告封面
- 姓名:谭笑
- 学号:20165221
- 班级:1652班
- 实验名称: JAVA——敏捷开发与XP实践
- 指导老师:娄嘉鹏
- 试验时间:15:35--17:15
- 实验性质:选修
- 实验组次:21
- 实验序号:3
实验过程:
1.XP基础
极限编程(ExtremeProgramming,XP)是一种全新而快捷的软件开发方法。XP团队使用现场客户、特殊计划方法和持续测试来提供快速的反馈和全面的交流:
XP是以开发符合客户需要的软件为目标而产生的一种方法论
XP是一种以实践为基础的软件工程过程和思想
XP认为代码质量的重要程度超出人们一般所认为的程度
XP特别适合于小型的有责任心的、自觉自励的团队开发需求不确定或者迅速变化的软件
XP软件开发的基石是XP的活动,包括:编码、测试、倾听、设计。
2.XP核心实践
3.相关工具
二、在IDEA中使用工具格式化代码
实验内容:
安装alibaba插件,解决代码中的规范问题。在IDEA中使用工具把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能。提交截图,加上自己学号水印。
- Code菜单功能
Override Methods:重载方法/新建方法
Implement Methods:执行方法
Generate:创建类里面任何字段的getter与setter方法
Surround with:将某条语句被if、for等等封装语句括起
Down/up:将语句下移到后一模块之后
Move line down:调换语句顺序
Comment with Line/BlockComment```:两种注释
Reformat Code:将代码按标准格式缩进
编程标准使代码更容易阅读和理解。编程标准包含:具有说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。
Settings ->Plugins -> Browse repositories...安装alibaba
在项目名称上单击右键,在弹出菜单上选择编码规约扫描
下载搭档代码并添加测试用例
- 重构后代码
class studentdark {
private int num;
private String name;
private int java;
public int getNum() {
return num;
}
@Override
public String toString() {
return "studentdark{" +
"num=" + num +
", name='" + name + '\'' +
", java=" + java +
'}';
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getJava() {
return java;
}
public void setJava(int java) {
this.java = java;
}
}
public class studentdarkTest {
public static void main(String[] args) {
studentdark student = new studentdark();
student.setName("caoge");
student.setNum(5312);
student.setJava(94);
System.out.println("学号为"+ student.getNum() +",姓名为"+ student.getName() +"java成绩为"+ student.getJava());
}
}
结对编程--JAVA密码学算法
密码学包括密码编码学(Cryptography) 和密码分析学(Cryptanalyst) 两个分支。
密码编码学: 主要研究如何对信息进行编码, 如何实现对信息的隐蔽, 是密码学理论的基础, 也是保密系统设计的基础。
密码分析学: 主要研究加密消息的破译或消息的伪造, 是检验密码*安全性最为直接的手段, 只有通过实际密码分析考验的密码*,才是真正可用的。
Java安全体系结构总共分为4个部分:
- JCA( Java Cryptography Architecture, Java加密体系结构):JCA提供基本的加密框架, 如证书、 数字签名、消息摘要和密钥对产生器。
- JCE( Java Cryptography Extension, Java加密扩展包):JCE在JCA的基础上作了扩展, 提供了各种加密算法、 消息摘要算法和密钥管理等功能。JCE的实现主要在javax.crypto包( 及其子包) 中
- JSSE( Java Secure Sockets Extension, Java安全套接字扩展包):JSSE提供了基于SSL( Secure Sockets Layer,安全套接字层) 的加密功能。 在网络的传输过程中, 信息会经过多个主机(很有可能其中一台就被窃听) , 最终传送给接收者, 这是不安全的。这种确保网络通信安全的服务就是由JSSE来提供的。
- JAAS( Java Authentication and Authentication Service, Java鉴别与安全服务):JAAS提供了在Java平台上进行用户身份鉴别的功能。
我们小组结合正在学习《密码学》中的DES算法,以及认真阅读娄老师博客
- Java密码学算法,了解到“DES”是目前最常用的对称加密算法,但安全性较差。针对DES安全性的改进产生了能满足当前安全需要的TripleDES算法,即“DESede”。决定实现TripleDES算法,在老师范例代码上做了调整。
编程思路:
(1) 获取密钥生成器KeyGenerator kg=KeyGenerator.getInstance("DESede");
Java中KeyGenerator类中提供了创建对称密钥的方法。KeyGenerator类预定义了一个静态方法getInstance( ),方法getInstance( )的参数为字符串类型,指定加密算法的名称。
(2) 初始化密钥生成器kg.init(168);该步骤一般指定密钥的长度。我们写的是“DESede”,则可以是112或168位,其中112位有效。
(3) 生成密钥SecretKey k=kg.generateKey( );密钥可用于以后的加密和解密。
Java密码学算法
密码学包含密码编码学和密码分析学两个分支
- 密码编码学:主要研究如何对信息进行编码,如何实现对信息的隐蔽,是密码学理论的基础,也是保密系统设计的基础。
- 密码分析学:主要研究加密消息的破译或消息的伪造,是检验密码*安全性最为直接的手段,只有通过实际密码分析考验的密码*,才是真正可用的。
体验加解密-凯撒密码
Java对称加密-DES算法
Java非对称加密-RSA算法
使用密钥协定创建共享密钥
Java摘要算法- MD5
Java混合密码系统
实验任务:以结对的方式完成Java密码学相关内容的学习,结合重构,git,代码标准。
实验代码:
凯撒密码
public class Caesar{
public static void main(String []args) throws Exception{
String s=args[0];
int key=Integer.parseInt(args[1]);
String es="";
for(int i=0;i<s.length( );i++)
{ char c=s.charAt(i);
// 是小写字母
c = getC(key, c);
es+=c;
}
System.out.println(es);
}
private static char getC(int key, char c) {
if(c>='a' && c<='z') {
//移动key%26位
c = move(key, c);
if(c<'a') {
//向左超界
c = changeCplus(c);
}
if(c>'z') {
//向右超界
c = changeCminus(c);
}
}
// 是大写字母
else if(c>='A' && c<='Z') {
c = move(key, c);
if(c<'A') {
c = changeCplus(c);
}
if(c>'Z') {
c = changeCminus(c);
}
}
return c;
}
private static char changeCminus(char c) {
c -= 26;
return c;
}
private static char changeCplus(char c) {
c += 26;
return c;
}
private static char move(int key, char c) {
c+=key%26;
return c;
}
}
- Java摘要算法- MD5
public class DigestPass{
public static void main(String[ ] args) throws Exception{
String x = getString(args[0]);
MessageDigest m=MessageDigest.getInstance("MD5");
m.update(x.getBytes("UTF8"));
byte[] s = getDigest(m);
String result="";
for (int i=0; i<s.length; i++){
result+= getString(s[i]).substring(6);
}
System.out.println(result);
}
private static String getString(byte b) {
return Integer.toHexString((0x000000ff & b) |
0xffffff00);
}
private static byte[] getDigest(MessageDigest m) {
return m.digest();
}
private static String getString(String arg) {
return arg;
}
}