20162311 实验三 敏捷开发与XP实践 实验报告
20162311 实验三 敏捷开发与XP实践 实验报告
实验内容
一、研究学习IDEA中的Code菜单
使用
Code
->Reformate 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));
}
}
找出一项自己感觉最好的功能
个人认为Surround With
这个功能不错,可以将一段代码用一些常用的if/else
,try/catch
,while
等包围起来。
二、下载搭档的Complex
代码进行单元测试
添加了三个测试用例,运行结果如下
- 这里是代码链接
- 以下是
git log
截图
三、下载搭档代码进行至少三项重构
先在实验三 敏捷开发与XP实践中学习了重构,然后下载搭档代码进行练习
我进行的三项重构分别为
Rename
Ecapsulate Fields
Extract Methods
四、学习Java 密码学算法
参考Java 密码学算法,以结对的方式完成Java密码学相关内容的学习,结合重构,git,代码标准。
(一)凯撒密码
- 凯撒密码的加密算法过程如下:
在这里,我们做此约定:明文记为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为基本字符个数)
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);
if(c>='a' && c<='z') // 是小写字母
{ c+=key%26; //移动key%26位
if(c<'a') c+=26; //向左超界
if(c>'z') c-=26; //向右超界
}
else if(c>='A' && c<='Z') // 是大写字母
{ c+=key%26;
if(c<'A') c+=26;
if(c>'Z') c-=26;
}
es+=c;
}
System.out.println(es);
}
该程序既可用于加密又可用于解密。只要执行:
java Caesar 明文(要加密的字符串) 密钥(移动的位数)
即可加密。
在密钥前面加上负号,将运行
java Caesar 密文(要解密的字符串) -密钥(移动的位数)
即可解密。
- 下面我用
Hello World
试验
加密
解密
(二)Java对称加密-DES算法
此种加密算法在加密和解密时使用的是同一密钥。博客中的示例将密钥生成在
key1.dat
文件中,编码格式保存于keykb1.dat
中,加密时从key1.dat
中获取密钥并将密文保存在SEnc.dat
文件中。解密时从keykb1.dat
中获取编码格式并解密。
- 以下是加密和解密截图
加密
解密
(三)Java非对称加密-RSA算法
Java非对称加密-RSA算法是指加密和解密时使用不同的密钥。同时,传递密文的双方A和B可以各自有一套公钥和私钥。A用B的公钥加密信息,传递给B,B再用自己的私钥解密,同理B也是如此
我先运行如下代码,把自己的公钥和私钥分别生成在Skey_RSA_pub20162311.dat
和Skey_RSA_priv20162311.dat
两个不同的文件中。
import java.io.*;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
public class Skey_RSA{
public static void main(String args[]) throws Exception{
KeyPairGenerator kpg=KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair kp=kpg.genKeyPair();
PublicKey pbkey=kp.getPublic();
PrivateKey prkey=kp.getPrivate();
// 保存公钥
FileOutputStream f1=new FileOutputStream("Skey_RSA_pub20162311.dat");
ObjectOutputStream b1=new ObjectOutputStream(f1);
b1.writeObject(pbkey);
// 保存私钥
FileOutputStream f2=new FileOutputStream("Skey_RSA_priv20162311.dat");
ObjectOutputStream b2=new ObjectOutputStream(f2);
b2.writeObject(prkey);
}
}
然后加密
package exp3;
/**
* Created by Administrator on 2017/5/10.
*/
import java.security.*;
import java.security.spec.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import javax.crypto.interfaces.*;
import java.security.interfaces.*;
import java.math.*;
import java.io.*;
public class Enc_RSA{
public static void main(String args[]) throws Exception{
String s= args[0];
// 获取公钥及参数e,n
FileInputStream f=new FileInputStream("Skey_RSA_pub20162311.dat");
ObjectInputStream b=new ObjectInputStream(f);
RSAPublicKey pbk=(RSAPublicKey)b.readObject( );
BigInteger e=pbk.getPublicExponent();
BigInteger n=pbk.getModulus();
System.out.println("e= "+e);
System.out.println("n= "+n);
// 明文 m
byte ptext[]=s.getBytes("UTF8");
BigInteger m=new BigInteger(ptext);
// 计算密文c,打印
BigInteger c=m.modPow(e,n);
System.out.println("c= "+c);
// 保存密文
String cs=c.toString( );
BufferedWriter out=
new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("Enc_RSA.dat")));
out.write(cs,0,cs.length( ));
out.close( );
}
}
再用私钥解密
package exp3;
/**
* Created by Administrator on 2017/5/10.
*/
import java.security.*;
import java.security.spec.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import javax.crypto.interfaces.*;
import java.security.interfaces.*;
import java.math.*;
import java.io.*;
public class Dec_RSA{
public static void main(String args[]) throws Exception{
//读取密文
BufferedReader in=
new BufferedReader(new InputStreamReader(
new FileInputStream("Enc_RSA.dat")));
String ctext=in.readLine();
BigInteger c=new BigInteger(ctext);
//读取私钥
FileInputStream f=new FileInputStream("Skey_RSA_priv20162311.dat");
ObjectInputStream b=new ObjectInputStream(f);
RSAPrivateKey prk=(RSAPrivateKey)b.readObject( );
BigInteger d=prk.getPrivateExponent();
//获取私钥参数及解密
BigInteger n=prk.getModulus();
System.out.println("d= "+d);
System.out.println("n= "+n);
BigInteger m=c.modPow(d,n);
//显示解密结果
System.out.println("m= "+m);
byte[] mt=m.toByteArray();
System.out.println("PlainText is ");
for(int i=0;i<mt.length;i++){
System.out.print((char) mt[i]);
}
}
}
我把加密和解密的方法写入了
EncryptAndDecrypt
类中,然后在RSATest
类中调用加密和解密的方法,就能在一个程序中同时加密和解密
EncryptAndDecrypt
类的码云链接
在
RSATest
类中实例化一个EncryptAndDecrypt
对象。
package exp3;
/**
* Created by Administrator on 2017/5/11.
*/
public class RSATest {
public static void main(String[] args) throws Exception {
String s = args[0];
EncryptAndDecrypt ead = new EncryptAndDecrypt("Skey_RSA_pub20162311.dat", "Enc_RSA.dat","Skey_RSA_priv20162311.dat");
ead.Encrypt(s);
ead.Decrypt();
}
}
实验问题
前三个实验比较简单,没有遇到什么问题,但是在练习Java非对称加密-RSA算法时遇到一个比较麻烦的问题。
- 问题:我和我的搭档各自生成了自己的公钥和私钥,我将搭档的公钥拷贝到我的IDEA上,然后用搭档的公钥进行加密,却出现了异常
搭档在自己的IDEA中可以用自己的公钥进行加密,但到了我的IDEA中就不行了。我请教了老师,老师将我们的代码git pull在Linux命令行下运行了,发现也不行,最后老师说是环境问题,所以我放弃了用搭档的公钥加密,再把密文传给搭档,让其用私钥解密的试验。
实验收获与感想
一、收获
本次实验收获如下
- 学会了IDEA的
Code
菜单中的许多实用的功能 - 学会了如何对代码进行重构
- 学会使用一些基础的Java密码学算法
二、感想
学习Java这门语言已经大半个学期了,从最开始的在命令行下敲代码,到现在用IDEA编程序,感觉自己的成长还是比较明显的。通过这次实验,我发现Java中包含了许多知识,不仅是编程,还有很多以前没有接触过的思维方式。这次实验我能明显感觉到没有前两次那么艰难,老师教的学习方法还是有很大用处的。这学期还有两次实验,希望自己能做的更好。
20162311 实验三 敏捷开发与XP实践 实验报告的更多相关文章
- 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
- 20165308实验三 敏捷开发与XP实践实验报告
实验三 敏捷开发与XP实践实验报告 实验目的 安装 alibaba 插件,解决代码中的规范问题.再研究一下Code菜单,找出一项让自己感觉最好用的功能. 在码云上把自己的学习搭档加入自己的项目中,确认 ...
- 20165230 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20165230 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导教 ...
- 20155207王雪纯 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20155207王雪纯 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
- 20155220 实验三 敏捷开发与XP实践 实验报告
20155220 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- # 20155224 实验三 敏捷开发与XP实践 实验报告
20155224 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- 20155226 实验三 敏捷开发与XP实践 实验报告
20155226 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- 20155311 实验三 敏捷开发与XP实践 实验报告
20155311 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 xp核心工具 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- 2016-2017-2 20155339 《Java面向对象程序设计》实验三敏捷开发与XP实践实验报告
2016-2017-2 20155339 <Java面向对象程序设计>实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验内容 一.在IDEA中使用工具(Co ...
随机推荐
- 21个DOS常用命令
DOS,可别不知道DOS在哪里运行,有好几种方法1.开始菜单---程序---附件---命令提示符2.开始菜单---运行---打命令CMD 一.常用DOS命令(1)cd.. ...
- WPF基础篇之资源文件路径
WPF资源文件的路径 关于WPF资源文件的路径 这几天在WPF中调用资源文件的Uri时,因为是在代码里调用Uri写的Uri总是不对,要么运行直接报异常,要么说找不到资源文件.下面是我解决的整个经过和碰 ...
- SqlBulkCopy 批量复制数据到数据库
1.简介 1.MSDN 核心方法:SqlBulkCopy.WriteToServer 将所有行从数据源复制到 SqlBulkCopy 对象的 DestinationTableName 属性指定的目标表 ...
- Java多线程之Callable接口的实现
Callable 和 Future接口 Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务. Callable和Runn ...
- Python基础__函数
本节将进入函数的介绍,函数是Python基础中最精彩的部分之一,接下来将对函数做详细介绍.函数 函数就是对代码进行一个封装.把实现某一功能的代码进行封装到一起.下次需要使用时不需要进行编写代码直接调用 ...
- Dynamics 365中审核用户权限变化的一种方法
摘要: 本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复268或者20180311可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyon ...
- 【CJOJ P1365】最短路
http://oj.changjun.com.cn/problem/detail/pid/1365 Description 给出N个点,M条无向边的简单图,问所有点对之间的最短路. Input 第1行 ...
- [Luogu3345][ZJOI2015]幻想乡战略游戏
Luogu 题意: 动态维护带权重心. sol 这是一道写起来很舒服的动态点分治.(不像某些毒瘤题) 我们考虑,如果你选择的补给点不是当前的带权重心,那么带权重心就在补给点的一个子树中(你把补给点当做 ...
- [BZOJ1058][ZJOJ2007]报表统计
BZOJ Luogu 题目描述 Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一. 经过仔细观察,小Q发现统计一张报表实际上是维 ...
- 华为悦盒 EC6108V9U 破解过程全记录(root扫盲) [原创]
电信宽带送的 IPTV 盒子,CPU 为 Hi3798M,1G 内存,8G 存储,支持 H.265 硬解码,系统为 Android 4.4.2,却只能看电视,岂不浪费?好在华为厚道,还是留了后门供 D ...