20155231 2016-2017-2 《Java程序设计》第10周学习总结
20155231 2016-2017-2 《Java程序设计》第10周学习总结
教材学习内容总结
学习目标
- 了解计算机网络基础
- 掌握Java Socket编程
- 理解混合密码系统
- 掌握Java 密码技术相关API的使用
Java 密码学算法
- 我们遇到的安全问题可以归结为安全的三个属性(CIA金三角):
- 机密性(Confidentiality):确保数据仅能被合法的用户访问, 即数据不能被未授权的第三方使用。
- 完整性(Integrity):主要确保数据只能由授权方或以授权的方式进行修改,即数据在传输过程中不能被未授权方修改。
- 可用性(Availability):主要确保所有数据仅在适当的时候可以由授权方访问。
- 其他安全技术目标:
- 可靠性: 主要确保系统能在规定条件下、 规定时间内、 完成规定功能时具有稳定的概率。
- 抗否认性: 又称抗抵赖性, 主要确保发送方与接收方在执行各自操作后, 对所做的操作不可否认。
- 可控性: 主要是对信息及信息系统实施安全监控。
- 可审查性: 主要是通过审计、 监控、 抗否认性等安全机制, 确保数据访问者( 包括合法用户、 攻击者、
- 破坏者、 抵赖者) 的行为有证可查, 当网络出现安全问题时, 提供调查依据和手段。
- 认证( 鉴别) : 主要确保数据访问者和信息服务者的身份真实有效。
- 访问控制: 主要确保数据不被非授权方或以未授权方式使用。
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平台上进行用户身份鉴别的功能。
凯撒密码
Java对称加密-DES算法
Java非对称加密-RSA算法
使用密钥协定创建共享密钥
Java摘要算法- MD5
Java混合密码系统
网络
- 网络编程步骤
- 客户端网络编程步骤
(1) 建立网络连接
(2) 交换数据
(3) 关闭网络连接 - 服务器端网络编程步骤
(1) 监听端口
(2) 获得连接
(3) 交换数据
(4) 关闭连接
- Java网络编程技术
- 网络编程的基础:和网络编程有关的基本API位于java.net包中,该包中包含了基本的网络编程实现。
- InetAddress类:基础的网络类,代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部。
(1)使用域名创建对象:
InetAddress inet1 = InetAddress.getByName("www.163.com");
(2)使用IP创建对象
InetAddress inet2 = InetAddress.getByName("127.0.0.1");
(3)获得本机地址对象
InetAddress inet3 = InetAddress.getLocalHost();
(4)获得对象中存储的域名
String host = inet3.getHostName();
(5)获得对象中存储的IP
String ip = inet3.getHostAddress();
- TCP编程
- TCP方式的网络编程:在实际实现时,以java.net.Socket类代表客户端连接,以java.net.ServerSocket类代表服务器端连接。
- 实现步骤:
(1)建立客户端网络连接,也就是创建Socket类型的对象
Socket socket1 = new Socket(“192.168.1.103”,10000);
(2)按照“请求-响应”模型进行网络数据交换
OutputStream os = socket1.getOutputStream(); //获得输出流
InputStream is = socket1.getInputStream(); //获得输入流
(3)关闭网络连接:
socket1.close(); - 实现服务器端监听的代码为:
ServerSocket ss = new ServerSocket(端口号); - 实现获得连接的代码是:
Socket socket = ss.accept(); - 关闭服务器端连接:
ss.close(); - 服务器端是对话一次数据以后就关闭了连接,如果服务器端程序关闭了,客户端继续发送数据肯定会出现异常。
- 网络协议
- 两个网络协议格式:客户端发送数据格式和服务器端反馈数据格式。
- 客户端程序需要完成的处理为:
(1)客户端发送协议格式的生成
(2)服务器端反馈数据格式的解析
服务器端程序需要完成的处理为:
(1)服务器端反馈协议格式的生成
(2)客户端发送协议格式的解析
教材学习中的问题和解决过程
- 问题1:UDP编程与TCP编程的区别及优缺点
- 问题1解决方案:udp协议于tcp协议最本质的区别是:udp不基于连接,tcp基于连接;简单的说就是通信双方是否在自己的机器上保持对方身份的记录,tcp保持,udp不保持。
udp适合传输数据内容不太敏感,丢失、误传影响不大的工作,例如局域网聊天、设备发现;tcp范围就太广了,凡是应用规模大点、网络环境恶劣点的应用都需要,例如ftp、网管、下载软件等。
另外在网络环境相同的情况下,使用默认的tcp和udp协议时,网络好udp的效率高一些,而网络不好tcp的稳定性高一些。
代码调试中的问题和解决过程
- 问题1:使用KeyPair类的getPublic( )和getPrivate( )方法获得公钥和私钥对象
- 问题1解决方案:
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_pub.dat");
ObjectOutputStream b1=new ObjectOutputStream(f1);
b1.writeObject(pbkey);
// 保存私钥
FileOutputStream f2=new FileOutputStream("Skey_RSA_priv.dat");
ObjectOutputStream b2=new ObjectOutputStream(f2);
b2.writeObject(prkey);
}
}
代码托管
本周:

总量:

上周考试错题总结
- 简答(5)你是如何运行P509 ConnectionDemo.java和P513 MessageDAODemo.java的?
下载安装MySQL(或XAMPP),IDE(Eclipse/IDEA/Netbeans)中导入数据库驱动 (1分)
建数据库demo : create schema demo (1 分)
修改P509 ConnectionDemo.java中passwd 改为自己的,openhome的一般不对(1分)
建表:
Use demo;
create TABLE t_message …. (1分)
修改P509 ConnectionDemo.java中MessageDAO dao = new MessageDAO()中的口令 改为自己的,openhome的一般不对(1分)
结对及互评
评分标准
正确使用Markdown语法(加1分):
- 不使用Markdown不加分
- 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
- 排版混乱的不加分
模板中的要素齐全(加1分)
- 缺少“教材学习中的问题和解决过程”的不加分
- 缺少“代码调试中的问题和解决过程”的不加分
- 代码托管不能打开的不加分
- 缺少“结对及互评”的不能打开的不加分
- 缺少“上周考试错题总结”的不能加分
- 缺少“进度条”的不能加分
- 缺少“参考资料”的不能加分
教材学习中的问题和解决过程, 一个问题加1分
代码调试中的问题和解决过程, 一个问题加1分
本周有效代码超过300分行的(加2分)
- 一周提交次数少于20次的不加分
其他加分:
- 周五前发博客的加1分
- 感想,体会不假大空的加1分
- 排版精美的加一分
- 进度条中记录学习时间与改进情况的加1分
- 有动手写新代码的加1分
- 课后选择题有验证的加1分
- 代码Commit Message规范的加1分
- 错题学习深入的加1分
- 点评认真,能指出博客和代码中的问题的加1分
- 结对学习情况真实可信的加1分
扣分:
- 有抄袭的扣至0分
- 代码作弊的扣至0分
- 迟交作业的扣至0分
点评模板:
博客中值得学习的或问题:
- xxx
- xxx
- ...
代码中值得学习的或问题:
- xxx
- xxx
- ...
基于评分标准,我给本博客打分:XX分。得分情况如下:xxx
点评过的同学博客和代码
本周结对学习情况
- 20155206
- 结对照片
- 结对学习内容
- Java 密码技术
- 网络
- 上周错题
上周博客互评情况(只要链接,具体点评放相应博客下)
其他(感悟、思考等,可选)
本周学习和其他科学习内容有所相通,但是,真的难。
学习进度条
| 代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
|---|---|---|---|---|
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第10周 | 355/4288 | 1/12 | 14/1000 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
计划学习时间:20小时
实际学习时间:14小时
改进情况:多多自我实践
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
参考资料
20155231 2016-2017-2 《Java程序设计》第10周学习总结的更多相关文章
- 2018面向对象程序设计(Java)第10周学习指导及要求
2018面向对象程序设计(Java)第10周学习指导及要求(2018.11.1-2018.11.4) 学习目标 理解泛型概念: 掌握泛型类的定义与使用: 掌握泛型方法的声明与使用: 掌握泛型接口的定 ...
- 面向对象程序设计(JAVA) 第10周学习指导及要求
2019面向对象程序设计(Java)第10周学习指导及要求 (2019.11.1-2019.11.4) 学习目标 1.掌握java异常处理技术: 2.了解断言的用法: 3.了解日志的用途: 4.掌 ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结
20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...
- 20155304田宜楠 2006-2007-2 《Java程序设计》第二周学习总结
20155304田宜楠 2006-2007-2 <Java程序设计>第二周学习总结 教材学习内容总结 一.类型与变量 1.类型 整数: 可细分为为short整数(占2字节),int整数(占 ...
随机推荐
- java内部类之成员内部类实例
第一个是如何实现同时继承两个类 public class MultiExtendsDemo { public static void main(String[] args) { // TODO Aut ...
- 理解活在Iphone中的那些App (一)
关于一个app的生命 干IOS开发两年多了,如果把大学中的时间也算上,编程也有六年了.这些时间中,从一个懵懵懂懂的学徒,变成一个还算熟练的码农,也多多少少有一点反思.于是,边促成了理解活在Iphone ...
- angularjs中factory, service和provider
在Angular里面,services作为单例对象在需要到的时候被创建,只有在应用生命周期结束的时候(关闭浏览器)才会被清除.而controllers在不需要的时候就会被销毁了(因为service的底 ...
- redis几种加锁的实现
1. redis加锁分类 redis能用的的加锁命令分表是INCR.SETNX.SET 2. 第一种锁命令INCR 这种加锁的思路是, key 不存在,那么 key 的值会先被初始化为 0 ,然后再执 ...
- angular cli
1. 安装cnpm: npm install -g cnpm --registry=https://registry.npm.taobao.org 2. 安装angular/cli: cnpm ins ...
- springmvc与Structs2本质区别
1.前端控制器不同:structs2入口是一个filter过滤器,springmvc入口是一个servlet. 2.设计思想不同: struts2通过在action类中定义成员变量接收请求参数,str ...
- 人人开源之代码生成器(renren-generator)
本篇文章,主要包含三个部分,介绍.代码生成演示.代码分析(不会很深入)等 三个部分足以让你学会使用,实际生产可能遇到的问题不会在这遇到. 代码生成器的作用在于提高开发效率.但是这个代码生成器仍有其局限 ...
- [转]MBTiles 1.2 规范翻译
MBTiles 1.2 可以参考超图的文档MBTiles扩展具体实现可以参考浅谈利用SQLite存储离散瓦片的思路和实现方法 mapbox提供了一个简单实现测试代码,github地址在这里https: ...
- Bayesian Theorem
- JNI由浅入深_3_Hello World
1.需要准备的工具,eclipse,cdt(c++)插件,cygwin(unix)和 android ndk. 在cygwin的etc目录下将ndk的路径引入到profile文件中,可以在cygwin ...