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();
    }
 
     
     
 
}

结果截图:

实验总结

本次实验让我了解了代码规范性的重要性,同时结对编程也是我们小组合作得更加默契,对我们受益匪浅

posted @ 2018-04-28 16:20  杨金川  阅读(160)  评论(1编辑  收藏  举报