zoukankan      html  css  js  c++  java
  • 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();
        }
     
         
         
     
    }
    

    结果截图:

    实验总结

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

  • 相关阅读:
    eclipse中maven插件,改变默认仓库位置
    maven ArtifactTransferException:failure
    抽象工厂模式
    简单工厂模式,利用反射机制让简单工厂模式变得更灵活
    Android开发之获取系统版本号
    Android开发之ProgressDialog与ProgressBar
    Failed to initialize monitor Thread: Unable to establish loopback connection解决方法
    Android开发之通过反射获取到挂断电话的API
    Android Studio常用插件
    Proxifier设置代理
  • 原文地址:https://www.cnblogs.com/asd65360323/p/8966980.html
Copyright © 2011-2022 走看看