Java实验报告五:Java网络编程及安全
2015-06-16 15:57
609 查看
Java实验报告五:Java网络编程及安全
20135315 宋宸宁
一、实验内容
1.掌握Socket程序的编写;
2.掌握密码技术的使用;
3.设计安全传输系统。
二、实验步骤
1. 基于Java Socket实现安全传输
2. 基于TCP实现客户端和服务器,结对编程一人负责客户端,一人负责服务器
3. 使用Git进行版本控制
4. 选择对称算法进行数据加解密.
5. 选择非对称算法对对称加密密钥进行密钥分发.
6. 选择合适的Hash算法进行完整性验证.
7. 选择合适的算法对Hash值进行签名/验证.
三、设计思路
我的结队伙伴是芦畅:http://www.cnblogs.com/bonjourvivi/p/4565004.html
1.我负责的是服务器的部分,在客户端Client程序中输入明文“Hello World!”然后利用随机秘钥发生器产生DES秘钥,经过秘钥扩展,将扩展秘钥应用IO流存入文件keykb1.dat中,并打印输出扩展秘钥。
2.将明文加密,并将密文以UTF8编码方式打印出来
3.传递密文给服务器
4.客户端利用服务器的公开密钥,将密钥加密传递给服务器
9.客户端用hash函数给明文加密,将明文的哈希值通过IO流传递给密文
String x=s;
四、实验结果
客户端
五、遇到的问题
两个人进行测试时,服务器与客户端已成功连接,但是服务器不显示结果,当自己相连时,会出现服务器结果,但是会被客户端结果覆盖,但可以快速截图截下结果,且结果正确。
六、解决办法
在一台电脑上实现数据的加解密传输。
七、统计时间
20135315 宋宸宁
一、实验内容
1.掌握Socket程序的编写;
2.掌握密码技术的使用;
3.设计安全传输系统。
二、实验步骤
1. 基于Java Socket实现安全传输
2. 基于TCP实现客户端和服务器,结对编程一人负责客户端,一人负责服务器
3. 使用Git进行版本控制
4. 选择对称算法进行数据加解密.
5. 选择非对称算法对对称加密密钥进行密钥分发.
6. 选择合适的Hash算法进行完整性验证.
7. 选择合适的算法对Hash值进行签名/验证.
三、设计思路
我的结队伙伴是芦畅:http://www.cnblogs.com/bonjourvivi/p/4565004.html
1.我负责的是服务器的部分,在客户端Client程序中输入明文“Hello World!”然后利用随机秘钥发生器产生DES秘钥,经过秘钥扩展,将扩展秘钥应用IO流存入文件keykb1.dat中,并打印输出扩展秘钥。
String s="Hello World!"; KeyGenerator kg=KeyGenerator.getInstance("DESede"); kg.init(168); SecretKey k=kg.generateKey( ); byte[ ] kb=k.getEncoded( ); FileOutputStream fk=new FileOutputStream("keykb1.dat"); fk.write(kb); for(int i=0;i<kb.length;i++){ System.out.print(kb[i]+",");//打印扩展秘钥 }
2.将明文加密,并将密文以UTF8编码方式打印出来
Cipher cp=Cipher.getInstance("DESede"); cp.init(Cipher.ENCRYPT_MODE, k); byte ptext[]=s.getBytes("UTF8"); for(int i=0;i<ptext.length;i++){ System.out.print(ptext[i]+","); } System.out.println(""); byte ctext[]=cp.doFinal(ptext); for(int i=0;i<ctext.length;i++){ System.out.print(ctext[i] +","); }
3.传递密文给服务器
FileOutputStream f2=new FileOutputStream("SEnc.dat"); f2.write(ctext);
4.客户端利用服务器的公开密钥,将密钥加密传递给服务器
FileInputStream f=new FileInputStream("Skey_RSA_pub.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); byte ptext1[]=s.getBytes("UTF8"); BigInteger m=new BigInteger(ptext1); BigInteger c=m.modPow(e,n); System.out.println("c= "+c); String cs=c.toString( ); BufferedWriter out1= new BufferedWriter(new OutputStreamWriter( new FileOutputStream("Enc_RSA.dat"))); out1.write(cs,0,cs.length( )); out1.close( );
9.客户端用hash函数给明文加密,将明文的哈希值通过IO流传递给密文
String x=s;
MessageDigest md5=MessageDigest.getInstance("MD5"); md5.update(x.getBytes( )); byte smd5[ ]=md5.digest( ); String result=""; for (int i=0; i<smd5.length; i++){ result+=Integer.toHexString((0x000000ff & smd5[i]) | 0xffffff00).substring(6); } System.out.println(result); out.println(result);
四、实验结果
客户端
五、遇到的问题
两个人进行测试时,服务器与客户端已成功连接,但是服务器不显示结果,当自己相连时,会出现服务器结果,但是会被客户端结果覆盖,但可以快速截图截下结果,且结果正确。
六、解决办法
在一台电脑上实现数据的加解密传输。
七、统计时间
步骤 | 耗时 | 百分比 |
需求分析 | 3h | 27.3% |
设计 | 1h | 9.1% |
代码实现 | 2h | 18.2% |
测试 | 4h | 36.4% |
分析总结 | 1h | 9.1% |
相关文章推荐
- Android Volley完全解析(二),使用Volley加载网络图片
- Ubuntu系统如何安装双网卡及更改网卡名称(eth0改为eth1)
- 一种无线网络连接不上的解决办法
- HTTP ERROR
- HLS (HTTP Live Streaming)
- ASIHTTPRequest缓存策略download cache
- Delphi-网络编程-UDP聊天程序(转)
- [Erlang]port(gen_tcp)如何并行?
- Http中的Get与Post
- 图解HTTPS协议
- java.lang.NoClassDefFoundError: org/apache/http/impl/client/HttpClients
- Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传
- HTTP协议详解
- java 网络(socket)
- iOS笔记之网络
- RTP/RTCP/RTSP/SIP/SDP 关系(直接看总结)
- VC网络通信API概览
- SOCKET与TCP,UDP有什么关系?
- Dart的HTTP请求和响应(1)
- java网络编程之socket网络编程示例(服务器端/客户端)