Java Socket使用加密协议进行传输对象的方法
本文实例讲述了java socket使用加密协议进行传输对象的方法。分享给大家供大家参考,具体如下:
前面的几篇文章介绍了socket中一些常见的用法,但是对于一些有安全要求的应用就需要加密传输的数据,此时就需要用到sslsocket了。
还是一样需要一个实现了java.io.serializable接口的简单java对象
package com.googlecode.garbagecan.test.socket.ssl; public class user implements java.io.serializable { private static final long serialversionuid = 1l; private string name; private string password; public user() { } public user(string name, string password) { this.name = name; this.password = password; } public string getname() { return name; } public void setname(string name) { this.name = name; } public string getpassword() { return password; } public void setpassword(string password) { this.password = password; } }
ssl server类,这里需要用到serversocketfactory类来创建sslserversocket类实例,然后在通过sslserversocket来获取sslsocket实例,这里考虑到面向对象中的面向接口编程的理念,所以代码中并没有出现sslserversocket和sslsocket,而是用了他们的父类serversocket和socket。在获取到serversocket和socket实例以后,剩下的代码就和不使用加密方式一样了。
package com.googlecode.garbagecan.test.socket.ssl; import java.io.bufferedinputstream; import java.io.ioexception; import java.io.objectinputstream; import java.io.objectoutputstream; import java.net.serversocket; import java.net.socket; import java.util.logging.level; import java.util.logging.logger; import javax.net.serversocketfactory; import javax.net.ssl.sslserversocketfactory; public class myserver { private final static logger logger = logger.getlogger(myserver.class.getname()); public static void main(string[] args) { try { serversocketfactory factory = sslserversocketfactory.getdefault(); serversocket server = factory.createserversocket(10000); while (true) { socket socket = server.accept(); invoke(socket); } } catch (exception ex) { ex.printstacktrace(); } } private static void invoke(final socket socket) throws ioexception { new thread(new runnable() { public void run() { objectinputstream is = null; objectoutputstream os = null; try { is = new objectinputstream(new bufferedinputstream(socket.getinputstream())); os = new objectoutputstream(socket.getoutputstream()); object obj = is.readobject(); user user = (user)obj; system.out.println("user: " + user.getname() + "/" + user.getpassword()); user.setname(user.getname() + "_new"); user.setpassword(user.getpassword() + "_new"); os.writeobject(user); os.flush(); } catch (ioexception ex) { logger.log(level.severe, null, ex); } catch(classnotfoundexception ex) { logger.log(level.severe, null, ex); } finally { try { is.close(); } catch(exception ex) {} try { os.close(); } catch(exception ex) {} try { socket.close(); } catch(exception ex) {} } } }).start(); } }
ssl client类和ssl server类类似,只是将其中获取socket的方式有所变化,其余的代码也和不使用加密方式一样。
package com.googlecode.garbagecan.test.socket.ssl; import java.io.bufferedinputstream; import java.io.ioexception; import java.io.objectinputstream; import java.io.objectoutputstream; import java.net.socket; import java.util.logging.level; import java.util.logging.logger; import javax.net.socketfactory; import javax.net.ssl.sslsocketfactory; public class myclient { private final static logger logger = logger.getlogger(myclient.class.getname()); public static void main(string[] args) throws exception { for (int i = 0; i < 100; i++) { socket socket = null; objectoutputstream os = null; objectinputstream is = null; try { socketfactory factory = sslsocketfactory.getdefault(); socket = factory.createsocket("localhost", 10000); os = new objectoutputstream(socket.getoutputstream()); user user = new user("user_" + i, "password_" + i); os.writeobject(user); os.flush(); is = new objectinputstream(new bufferedinputstream(socket.getinputstream())); object obj = is.readobject(); if (obj != null) { user = (user)obj; system.out.println("user: " + user.getname() + "/" + user.getpassword()); } } catch(ioexception ex) { logger.log(level.severe, null, ex); } finally { try { is.close(); } catch(exception ex) {} try { os.close(); } catch(exception ex) {} try { socket.close(); } catch(exception ex) {} } } } }
代码写完了,下面就需要产生keystore文件了,运行下面的命令
在提示输入项中,密码项自己给定,其它都不改直接回车,这里我使用的密码是“mysocket”。
运行server
运行client
ps:关于加密解密感兴趣的朋友还可以参考本站在线工具:
文字在线加密解密工具(包含aes、des、rc4等):
md5在线加密工具:
http://tools.jb51.net/password/createmd5password
在线散列/哈希算法加密工具:
在线md5/hash/sha-1/sha-2/sha-256/sha-512/sha-3/ripemd-160加密工具:
在线sha1/sha224/sha256/sha384/sha512加密工具:
更多关于java相关内容感兴趣的读者可查看本站专题:《java socket编程技巧总结》、《java文件与目录操作技巧汇总》、《java数据结构与算法教程》、《java操作dom节点技巧总结》和《java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
推荐阅读
-
Java Socket实现的传输对象功能示例
-
Java Socket使用加密协议进行传输对象的方法
-
Java使用Socket通信传输文件的方法示例
-
.NET CORE中使用AutoMapper进行对象映射的方法
-
asp.net使用Socket.Send发送信息及Socket.SendFile传输文件的方法
-
.NET CORE中使用AutoMapper进行对象映射的方法
-
Java中对象数组的使用方法详解
-
python 使用poster模块进行http方式的文件传输到服务器的方法
-
python使用socket进行简单网络连接的方法
-
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法