2018-2019-2 20175105王鑫浩《Java程序设计》实验三 《敏捷开发与XP实践》 实验三 《敏捷开发与XP实践》 Java密码学算法

实验报告封面

课程:Java程序设计 班级:1751班 姓名:王鑫浩 学号:20175105
指导教师:王鑫浩 实验日期:2019年4月29日
实验时间:--- 实验序号:实验三
实验名称:敏捷开发与XP实践


实验要求:

  • 完成实验三 敏捷开发与XP实践中的内容,参考Java密码学算法相关内容
  • 其中Eclipse相关的内容参考Intellj IDEA简易教程换成IDEA实现
  • 完成云班课中的检查点,也可以先完成实验报告,直接提交。注意不能只有截图,要有知识点,原理,遇到的问题和解决过程等说明。实验报告中一个检查点要有多张截图。
  • 发表实验报告博客,标题“学期(如2018-2019-2) 学号(如20175300)实验三《敏捷开发与XP实践》实验报告”

实验步骤

代码规范

要求:

敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA
参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECCODESTANDARD 安装alibaba 插件,解决代码中的规范问题。
在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能。提交截图,加上自己学号水印。

    public class CodeStandard {
    public static void main(String [] args){
    StringBuffer buffer = new StringBuffer();
    buffer.append('S');
    buffer.append("tringBuffer");
    System.out.println(buffer.charAt(1));
    System.out.println(buffer.capacity());
    System.out.println(buffer.indexOf("tring"));
    System.out.println("buffer = " + buffer.toString());
    if(buffer.capacity()<20)
    buffer.append("1234567");
    for(int i=0; i<buffer.length();i++)
    System.out.println(buffer.charAt(i));
    }
    }

具体操作

  • 打开 Settings-> Plugins -> Marketplace 在搜索框输入Alibaba即可看到Alibaba Java Code Guidelines插件,点击Install进行安装,然后重启IDE生效:
    2018-2019-2 20175105王鑫浩《Java程序设计》实验三 《敏捷开发与XP实践》
实验三 《敏捷开发与XP实践》
Java密码学算法
  • 利用编码规约扫描,解决代码中的规范问题
    2018-2019-2 20175105王鑫浩《Java程序设计》实验三 《敏捷开发与XP实践》
实验三 《敏捷开发与XP实践》
Java密码学算法
  • 格式化代码(快捷键为Ctrl+Alt+L,操作中清理代码选项可根据自身情况勾选)
    2018-2019-2 20175105王鑫浩《Java程序设计》实验三 《敏捷开发与XP实践》
实验三 《敏捷开发与XP实践》
Java密码学算法
  • Code操作快捷键对照
    Override Methods ( 重写覆盖方法 ) Ctrl + O
    Implements Methods ( 实现接口方法 ) Ctrl + I
    Gengrate ( 用于生成Construct、Getter/Setter、toString等) Alt + Insert
    Surround With (使用if-else、for、while等语句包装代码段) Ctrl+Alt+T
    SmartType ( 智能选择并实现 ) Ctrl + Shift + 空格
    Cyclic Expand Word ( 循环往上选择单词 ) Alt + /
    Cyclic Expand Word (Backwrad)( 循环往下选择单词 ) Alt + Shift + /
    Expand ( 方法展开 ) Ctrl + 加号
    Collapse ( 方法折叠 ) Ctrl + 减号
    Expand Recursively ( 同上,方法展开 ) Ctrl + Alt + 加号
    Collapse Recursively ( 同上,方法折叠 ) Ctrl + Alt + 减号
    Expand All ( 全部方法展开 ) Ctrl + Shift + 加号
    Collapse All ( 全部方法折叠 ) Ctrl + Shift + 减号
    Insert Live Template ( 选择Live Templates模板 ) Ctrl + J
    Surround with Live Template ( 选择Live Templates模板 ) Ctrl + Alt + J
    Comment with Line Comment ( 行注释 ) Ctrl + /
    Comment with Block Comment ( 块注释 ) Ctrl + Shift + /
    Reformat Code ( 格式化代码 ) Ctrl + Alt + L
    Show Reformat File Dialog ( 弹出格式化弹框 ) Ctrl + Alt + Shift + L
    Optimize Imports ( 去除未引用的包导入声明 ) Ctrl + Alt + O

结对编程

要求:

  • 在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容";git push;
  • 提交搭档项目git log的截图,包含上面git commit的信息,并加上自己的学号水印信息。
  • 邀请结对伙伴加入自己的仓库

具体操作

  • 1.拷贝同伴仓库代码到虚拟机
    2018-2019-2 20175105王鑫浩《Java程序设计》实验三 《敏捷开发与XP实践》
实验三 《敏捷开发与XP实践》
Java密码学算法
  • 2.加入不少于三个JUnit单元测试用例
    2018-2019-2 20175105王鑫浩《Java程序设计》实验三 《敏捷开发与XP实践》
实验三 《敏捷开发与XP实践》
Java密码学算法
    2018-2019-2 20175105王鑫浩《Java程序设计》实验三 《敏捷开发与XP实践》
实验三 《敏捷开发与XP实践》
Java密码学算法

重构

要求

  • 实验三 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA
  • 完成重构内容的练习,下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接。

概念:重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。
前提:不改变软件外部行为;来确保重构的安全

如何做到不改变软件外部行为?
重构后的代码要能通过单元测试

修改软件的四种动机:
1.增加新功能
2.原有功能有BUG
3.改善原有程序的结构
4.优化原有系统的性能

重构过程中常出现的问题:

没有为类注释作者
2018-2019-2 20175105王鑫浩《Java程序设计》实验三 《敏捷开发与XP实践》
实验三 《敏捷开发与XP实践》
Java密码学算法

所有的覆写方法,必须加@Override注解
2018-2019-2 20175105王鑫浩《Java程序设计》实验三 《敏捷开发与XP实践》
实验三 《敏捷开发与XP实践》
Java密码学算法


Java密码学算法

要求

安全问题可以归结为安全的三个属性(CIA金三角):
机密性(Confidentiality)
完整性(Integrity)
可用性(Availability)

密码学: 主要是研究保密通信和信息保密的学科, 包括信息保密传输和信息加密存储等。密码学包含密码编码学( 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平台上进行用户身份鉴别的功能。

体验加解密---凯撒密码
其加密过程如下:
在这里,我们做此约定:明文记为m,密文记为c,加密变换记为E(k1,m)(其中k1为密钥),解密变换记为D(k2,m)(k2为解密密钥)(在这里k1=k2,不妨记为k)。凯撒密码的加密过程可记为如下一个变换:
c≡m+k mod n (其中n为基本字符个数)
同样,解密过程可表示为:
m≡c+k mod n (其中n为基本字符个数)

/**
 * @author wxh
 * @date 2019/5/2
 */


public class Caesar {
    public static void main(String args[]) throws Exception{
        String s=args[0];
        int key=Integer.parseInt(args[1]);
        Movement m=new Movement();
        int n=s.length();
        String es="";
        for(int i=0;i<s.length();i++){
            char c=s.charAt(i);
            if(c >= 'a' && c <= 'z'){
                es=m.realizeMove(n,c,key,'a','z');
            }
            else if (c >= 'A' && c <= 'Z'){
                es=m.realizeMove(n,c,key,'A','Z');
            }
        }
        System.out.println(es);
    }
}
/**
 * @author wxh
 * @date 2019/5/2
 */
public class Movement {
    String es="";
    public  String  realizeMove(int n,char c,int key,char a,char b){
             //移动key%26位
             c+=key%26;
             if(c<a) {
                 c+=26;
                 //向左超界
             }
             if(c>b) {
                 c-=26;
                 //向右超界
             }
             es+=c;
         return es;
    }
}

2018-2019-2 20175105王鑫浩《Java程序设计》实验三 《敏捷开发与XP实践》
实验三 《敏捷开发与XP实践》
Java密码学算法
2018-2019-2 20175105王鑫浩《Java程序设计》实验三 《敏捷开发与XP实践》
实验三 《敏捷开发与XP实践》
Java密码学算法


感悟和收获

在本次实验中感受到了代码重构也是做程序一道重要且十分耗费精力的步骤,也进一步体会到结对作业的好处,同时学习了git clone的使用,方便了结对过程中双方互相补充的过程。
其次就是第一次利用代码直观了解了密码算法的实现,体会了密码学思想。

代码托管

我的码云[https://gitee.com/xinhaoa/textbook_code.git]
小伙伴的码云[https://gitee.com/Apollo20175126/java-besti-20175126.git]

参考资料

https://blog.csdn.net/weixin_42254058/article/details/81219931