您的位置:首页 > 移动开发 > Android开发

20155228 实验五 Android开发基础

2017-06-03 22:59 204 查看

20155228 实验五 Android开发基础

实验内容

1.掌握Socket程序的编写;

2.掌握密码技术的使用;

3.设计安全传输系统。

实验要求

1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程

2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导

3. 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。

实验步骤



结对编程:

参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA

结对实现中缀表达式转后缀表达式的功能 MyBC.java

结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java

上传测试代码运行结果截图和码云链接



结对编程:1人负责客户端,一人负责服务器

注意责任归宿,要会通过测试证明自己没有问题

基于Java Socket实现客户端/服务器功能,传输方式用TCP

客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式通过网络发送给服务器

服务器接收到后缀表达式,调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端

客户端显示服务器发送过来的结果

上传测试结果截图和码云链接



加密结对编程:1人负责客户端,一人负责服务器

注意责任归宿,要会通过测试证明自己没有问题

基于Java Socket实现客户端/服务器功能,传输方式用TCP

客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密后通过网络把密文发送给服务器

服务器接收到后缀表达式表达式后,进行解密(和客户端协商密钥,可以用数组保存),然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端

客户端显示服务器发送过来的结果

上传测试结果截图和码云链接



密钥分发结对编程:1人负责客户端,一人负责服务器

注意责任归宿,要会通过测试证明自己没有问题

基于Java Socket实现客户端/服务器功能,传输方式用TCP

客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文发送给服务器

客户端和服务器用DH算法进行3DES或AES算法的密钥交换

服务器接收到后缀表达式表达式后,进行解密,然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端

客户端显示服务器发送过来的结果

上传测试结果截图和码云链接



完整性校验结对编程:1人负责客户端,一人负责服务器

注意责任归宿,要会通过测试证明自己没有问题

基于Java Socket实现客户端/服务器功能,传输方式用TCP

客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文和明文的MD5値发送给服务器

客户端和服务器用DH算法进行3DES或AES算法的密钥交换

服务器接收到后缀表达式表达式后,进行解密,解密后计算明文的MD5值,和客户端传来的MD5进行比较,一致则调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端

客户端显示服务器发送过来的结果

上传测试结果截图和码云链接

遇到的问题和解决办法

1.编写客户端代码的时候发现如果要连接到服务器必须知道服务器的IP地址,但是在linux的命令行中查看PI的命令不是windows中的
ipconfig

解决办法:通过百度得知linux的命令行中查看IP地址的命令是
ifconfig


2.在使用AES算法对数据进行加密的时候得到的结果是乱码
解决办法:通过百度知道加密得到的结果是二进制数据,需要增加一个转换为十六进制的代码

public class ParseSystemUtil {

/**将二进制转换成16进制
* @param buf
* @return
*/
public static String parseByte2HexStr(byte buf[]) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < buf.length; i++) {
String hex = Integer.toHexString(buf[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
sb.append(hex.toUpperCase());
}
return sb.toString();
}

/**将16进制转换为二进制
* @param hexStr
* @return
*/
public static byte[] parseHexStr2Byte(String hexStr) {
if (hexStr.length() < 1)
return null;
byte[] result = new byte[hexStr.length()/2];
for (int i = 0;i< hexStr.length()/2; i++) {
int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);
int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);
result[i] = (byte) (high * 16 + low);
}
return result;
}
}

PSP时间统计

步骤耗时百分比
需求分析20min8%
设计40min16%
代码实现120min50%
测试20min8%
总结分析40min16%
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: