20172302《程序设计与数据结构》实验三 敏捷开发与XP实践报告

课程:《程序设计与数据结构》

班级: 1723

姓名: 侯泽洋

学号:20172302

实验教师:王志强老师

实验日期:2018年5月16日

必修/选修: 必修

1.实验内容

  • (1)代码规范
    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));
    }
    }
  • (2)协同测试
    在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容";git push;提交搭档项目git log的截图,包含上面git commit的信息,并加上自己的学号水印信息。
  • (3)重构 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA
    完成重构内容的练习,下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接。
  • (4)密码学应用
    参考 http://www.cnblogs.com/rocedu/p/6683948.html
    以结对的方式完成Java密码学相关内容的学习,结合重构,git,代码标准。提交学习成果码云链接和代表性成果截图,要有学号水印。

2.实验过程及结果

3. 实验过程中遇到的问题和解决过程

  • 问题一:关于密码学学习实验项目,参考的链接Java 密码学算法也看不太明白这个实验要做什么,怎么做,整个实验一头雾水。
  • 问题一解决方案:参考张昊然同学在蓝墨云上的提问与解答记录了解到实验的进行过程,
  • 问题二:关于密码学中使用密钥协定创建共享密钥这一项目实验过程中出现了问题,截图没有保存下来,问题是在进行这个代码的编译运行时找不到Bpub.dat和Bpri.dat文件。
import java.io.*;
import java.math.*;
import java.security.*;
import java.security.spec.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import javax.crypto.interfaces.*;
public class KeyAgree{
   public static void main(String args[ ]) throws Exception{
      // 读取对方的DH公钥
      FileInputStream f1=new FileInputStream(args[0]);
      ObjectInputStream b1=new ObjectInputStream(f1);
      PublicKey  pbk=(PublicKey)b1.readObject( );
//读取自己的DH私钥
      FileInputStream f2=new FileInputStream(args[1]);
      ObjectInputStream b2=new ObjectInputStream(f2);
      PrivateKey  prk=(PrivateKey)b2.readObject( );
      // 执行密钥协定
     KeyAgreement ka=KeyAgreement.getInstance("DH");
     ka.init(prk);
     ka.doPhase(pbk,true);
     //生成共享信息
     byte[ ] sb=ka.generateSecret();
     for(int i=0;i<sb.length;i++){
        System.out.print(sb[i]+",");
     }
    SecretKeySpec k=new  SecretKeySpec(sb,"DESede");
  }
}  
  • 问题二解决方案:后面询问其他同学,才知道自己对上面的Key_DH这一程序输入命令行时少输入了一次,也就是这一段文字

建立两个目录A和B,模拟需要秘密通信的A、B双方,由于DH算法需要A和B各自生成DH公钥和私钥,因此在这两个目录下都拷贝编译后文件Key_DH。
首先由A创建自己的公钥和私钥,即在A目录下输入“java Key_DH Apub.dat Apri.dat”运行程序,这时在目录A下将产生文件Apub.dat和Apri.dat,前者保存着A的公钥,后者保存着A的私钥。
然后由B创建自己的公钥和私钥,即在B目录下输入“java Key_DH Bpub.dat Bpri.dat”运行程序,这时在目录B下将产生文件Bpub.dat和Bpri.dat,前者保存着B的公钥,后者保存着B的私钥。
最后发布公钥,A将Apub.dat拷贝到B目录,B将Bpub.dat拷贝到A的目录。这样,A、B双方的DH公钥和私钥已经创建并部署完毕。

自己进行实验时值进行了一次命令行输入,就导致了上面的问题。再进行二次输入下面的参数,问题就解决了。下面是Key_DH的代码

import java.io.*;
import java.math.*;
import java.security.*;
import java.security.spec.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import javax.crypto.interfaces.*;
public class Key_DH{
       //三个静态变量的定义从
// C:\j2sdk-1_4_0-doc\docs\guide\security\jce\JCERefGuide.html
// 拷贝而来
// The 1024 bit Diffie-Hellman modulus values used by SKIP
    private static final byte skip1024ModulusBytes[] = {
        (byte)0xF4, (byte)0x88, (byte)0xFD, (byte)0x58,
        (byte)0x4E, (byte)0x49, (byte)0xDB, (byte)0xCD,
        (byte)0x20, (byte)0xB4, (byte)0x9D, (byte)0xE4,
        (byte)0x91, (byte)0x07, (byte)0x36, (byte)0x6B,
        (byte)0x33, (byte)0x6C, (byte)0x38, (byte)0x0D,
        (byte)0x45, (byte)0x1D, (byte)0x0F, (byte)0x7C,
        (byte)0x88, (byte)0xB3, (byte)0x1C, (byte)0x7C,
        (byte)0x5B, (byte)0x2D, (byte)0x8E, (byte)0xF6,
        (byte)0xF3, (byte)0xC9, (byte)0x23, (byte)0xC0,
        (byte)0x43, (byte)0xF0, (byte)0xA5, (byte)0x5B,
        (byte)0x18, (byte)0x8D, (byte)0x8E, (byte)0xBB,
        (byte)0x55, (byte)0x8C, (byte)0xB8, (byte)0x5D,
        (byte)0x38, (byte)0xD3, (byte)0x34, (byte)0xFD,
        (byte)0x7C, (byte)0x17, (byte)0x57, (byte)0x43,
        (byte)0xA3, (byte)0x1D, (byte)0x18, (byte)0x6C,
        (byte)0xDE, (byte)0x33, (byte)0x21, (byte)0x2C,
        (byte)0xB5, (byte)0x2A, (byte)0xFF, (byte)0x3C,
        (byte)0xE1, (byte)0xB1, (byte)0x29, (byte)0x40,
        (byte)0x18, (byte)0x11, (byte)0x8D, (byte)0x7C,
        (byte)0x84, (byte)0xA7, (byte)0x0A, (byte)0x72,
        (byte)0xD6, (byte)0x86, (byte)0xC4, (byte)0x03,
        (byte)0x19, (byte)0xC8, (byte)0x07, (byte)0x29,
        (byte)0x7A, (byte)0xCA, (byte)0x95, (byte)0x0C,
        (byte)0xD9, (byte)0x96, (byte)0x9F, (byte)0xAB,
        (byte)0xD0, (byte)0x0A, (byte)0x50, (byte)0x9B,
        (byte)0x02, (byte)0x46, (byte)0xD3, (byte)0x08,
        (byte)0x3D, (byte)0x66, (byte)0xA4, (byte)0x5D,
        (byte)0x41, (byte)0x9F, (byte)0x9C, (byte)0x7C,
        (byte)0xBD, (byte)0x89, (byte)0x4B, (byte)0x22,
        (byte)0x19, (byte)0x26, (byte)0xBA, (byte)0xAB,
        (byte)0xA2, (byte)0x5E, (byte)0xC3, (byte)0x55,
        (byte)0xE9, (byte)0x2F, (byte)0x78, (byte)0xC7
    };
    // The SKIP 1024 bit modulus
    private static final BigInteger skip1024Modulus
              = new BigInteger(1, skip1024ModulusBytes);
    // The base used with the SKIP 1024 bit modulus
    private static final BigInteger skip1024Base = BigInteger.valueOf(2);
public static void main(String args[ ]) throws Exception{
    DHParameterSpec DHP=
new DHParameterSpec(skip1024Modulus,skip1024Base);
     KeyPairGenerator kpg= KeyPairGenerator.getInstance("DH");
     kpg.initialize(DHP);
     KeyPair kp=kpg.genKeyPair();
     PublicKey pbk=kp.getPublic();
     PrivateKey prk=kp.getPrivate();
     // 保存公钥
     FileOutputStream  f1=new FileOutputStream(args[0]);
     ObjectOutputStream b1=new  ObjectOutputStream(f1);
     b1.writeObject(pbk);
     // 保存私钥
     FileOutputStream  f2=new FileOutputStream(args[1]);
     ObjectOutputStream b2=new  ObjectOutputStream(f2);
     b2.writeObject(prk);
   }
}  

其他(感悟、思考等)

  • 实验三的各个项目做起来的难度不大,但是对于有些项目的理解并不是很简单的事,前三个实验主要是对代码进行规范处理,再重新练习一次Junit测试内容,并对IDEA的更多功能产生一定的了解,以便以后的使用。第四个实验则理论性较大,各种加密算法目前我所能理解大概也就是那个很简单的凯撒密码,其他的密码产生看完博客只能说是认识了,具体实现的过程看不懂,学习那个ctf时对这些有些认识,希望以后能在那个的学习过程不仅了解如何去解密,还能学习到这些加密算法的具体实施过程。

参考资料

原文地址:https://www.cnblogs.com/hzy0628/p/9104987.html

时间: 2024-11-13 04:20:29

20172302《程序设计与数据结构》实验三 敏捷开发与XP实践报告的相关文章

20145301 实验三 &quot;敏捷开发与XP实践&quot;

20145301 实验三 "敏捷开发与XP实践" 程序设计过程 实验内容 使用 git 上传代码 使用 git 相互更改代码 实现代码的重构 git 上传代码 查看文件是否有修改的 将新建的文件传入本地 git push 文件,成功上传文件 再 git push 一次 所有东西已经上传过了 git 相互更改代码 新建存储空间 确定合作开发者地址 下载合作开发者的代码工程 修改代码 上传代码 结果: 实现代码的重构 源代码(以实验一代码为例)   重构后代码如下:   重构: 小组成员链

20145326蔡馨熠 实验三 &quot;敏捷开发与XP实践&quot;

20145326蔡馨熠 实验三 "敏捷开发与XP实践" 程序设计过程 实验内容 使用 git 上传代码 使用 git 相互更改代码 实现代码的重载 一.git上传代码 首先我通过git上传一个名为“shiyansan”的代码. 设置权限: 然后我的partner从网上把这个文档下载到他的电脑中. 然后再修改,再上传: 我的partner:-  [20145211黄志远开源托管代码](https://git.oschina.net/nostalgia_) 二.敏捷开发与XP 软件工程是把

20145311王亦徐 实验三 &quot;敏捷开发与XP实践&quot;

20145311王亦徐 实验三 "敏捷开发与XP实践"程序设计过程 实验内容 使用 git 上传代码 使用 git 相互更改代码 实现代码的重载 git 上传代码 查看代码是否有修改: 发现no changes 将代码上传到自己的开源中国项目中: 新建存储空间.然后进行git add.git commit.git push 两人运用版本控制进行合作修改代码: 首先通过对方的地址将代码下载下来:(git clone) 对代码进行修改后再上传: 合作对方对我的代码进行修改后再上传的结果 实

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

北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉鹏             实验日期:2015.5.29 实验密级:         预习程度:                     实验时间:15:30--18:00 仪器组次:         必修/选修: 选修             实验序号:3 实验名称:实验三 敏捷开发与XP实践 实

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

2018-2019-2 20175303 实验三敏捷开发与XP实践<Java开发环境的熟悉>实验报告 实验报告封面 课程:Java程序设计 班级:1753 姓名:柴轩达 学号:20175303 指导教师:娄嘉鹏 实验日期:2019年4月29日-5月2日 实验序号:3 实验名称:敏捷开发与XP实践 实验步骤 敏捷开发与XP实践-1 实验要求 参老师给的链接安装alibaba 插件,解决代码中的规范问题. 在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,

20175212童皓桢 实验三敏捷开发与XP实践实验报告

20175212童皓桢 实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验步骤 一.Code菜单功能的研究 Move Line/statement Down/Up:将某行.表达式向下.向上移动一行 suround with:用 try-catch,for,if等包裹语句 comment with line/block comment:把选中它区域变成注释 show reformat file dialog:按照格式自动对齐 Optimize imports:可以优

20155208实验三 敏捷开发与XP实践

20155208实验三 敏捷开发与XP实践 一.实验内容 (1)在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能. (2)下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例 (3)下载搭档的代码,至少进行三项重构 (4)以结对的方式完成Java密码学相关内容的学习,结合重构.git.代码标准等 二.实验步骤 (1)在IDEA中使用工具(Code->Reformate Code)把下

20165220 实验三 敏捷开发与XP实践 实验报告

实验三 敏捷开发与XP实践-1 实验要求: 实验三 敏捷开发与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菜单,找出一项让自己

20165329 实验三 敏捷开发与XP实践

20165329 实验三 敏捷开发与XP实践 一.敏捷开发与XP实践-1 实验要求: 在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能.提交截图,加上自己学号水印. public class CodeStandard { public static void main(String [] args){ StringBuffer buffer = new StringBuffer(); buffer.app