完成时间:大三下
开源地址
https://github.com/MingLeaf/SaftyJavaSocket.git
一、摘要
安全的即时通讯系统是一种加密通信工具,旨在保护用户的隐私和数据安全。这种系统使用端到端加密技术,确保只有通信双方可以读取和理解消息内容,其他人无法访问。
安全的即时通讯系统通常具有以下特点:
- 加密通信:所有通信都经过加密处理,确保消息内容只能被发送和接收的用户读取。
- 端到端加密:消息在发送方和接收方之间进行加密和解密,中间节点无法读取消息内容。
- 安全认证:用户必须进行身份验证才能使用系统,确保只有授权用户才能访问系统。
- 安全存储:所有消息和数据都存储在加密的数据库中,确保数据安全。
- 安全传输:消息和数据在传输过程中都经过加密处理,确保数据不会被窃听或篡改。
总之,安全的即时通讯系统是一种保护用户隐私和数据安全的通信工具,适用于个人和企业用户。
系统主体
二、项目设计
1.数据库设计
首先介绍一下表格:
Chat数据库里面包含两个表格分别为t_user(用户表)和t_friends(好友表)。
t_user(用户表):主要用来记录用户登录信息Uid为登录账号,uname为登录后昵称,pwd为登陆密码。其中密码字段做了加密处理(MD5加密)。
t_friends(好友表):主要用来保存用户的好友信息,Num无实际意义仅作为一种标识(或称作排序),mqq为用户账号,fqq为mqq的好友账号,fname为mqq的好友昵称,为一一对应关系,即mqq账户下有一个账户为fqq名为的fname朋友。
2.客户端设计
(1) Login.java:用户登录界面:实现了用户身份校验,将输入密码与数据库存储密码进行对比,校验成功才可以登陆成功。登录成功后显示好友界面;
1 | public void actionPerformed(ActionEvent e) { |
(2) Chat.java:好友聊天界面,实现消息发送,将接收到的消息显示出来,并将消息显示道指定面板,其中点击“消息记录”即可显示消息记录(注:只能显示这一次登录的聊天记录,该系统为即时通信系统,不能记录历史登录聊天记录);
实现消息发送:
1 | public void sendMsg(JFrame f, String senderName){ |
将收到的消息显示出来:
1 | public void showMessage(Message msg, boolean fromSelf) { |
(3) FriendList.java:登录成功主页面,显示好友列表。其中未在线好友头像为灰色,双击某好友即可打开聊天界面,点击退出即可退出。
发送消息到服务器:
1 | public void sendUnloadMsgToServer() { |
以树形结构显示好友列表:
1 | public void initList(JFrame f, Message msg){ |
3.服务端设计
ServerFrame.java:服务器开启关闭界面:主要是系统日志,启动关闭服务器,以及记录某用户登录以及下线动态。
JDBC_Util.java:这是一个用于JDBC连接MySql的工具类,实现所有对数据库的操作,对外提供方法。
ServerConClientThread.java:客户端登录成功服务器开一个线程与此客户端保持通讯。
ManaClientThread.java:管理所有与客户端通信的线程。
4.工具类
MD5Util.java:实现用于数据库加密的MD5工具
核心代码:
1 | public static String getMD5Str(String str){ |
DESUtil.java: 实现消息传输过程中的DES加密
加密函数:
1 | public static String encrypt(String content, String password) { |
解密函数:
1 | public static String decrypt(String content, String password) { |
完整演示
- 运行ServerFrame.java启动服务器:
- 运行Login.java进入客户端登录界面:
实现了多线程,可以同时登录多个账户: - 发送消息:
- 传输消息的加密与解密:
发送时调用消息加密函数:
接收时调用消息解密函数(被注释部分,方便下图演示)
在消息发送之前,会先把消息进行加密,下图所示是未解密的结果:若使解密部分正常运行,则会得到如下所示的结果:
此时即可正常发送消息。
总结
MD5是一种常见的哈希算法,它能够将任意长度的消息压缩成一个128位的哈希值。在使用MD5加密时,我们需要将消息作为输入,经过MD5算法的处理后,得到一个固定长度的哈希值作为输出。 MD5算法是一种单向哈希算法,即无法通过哈希值反推出原始消息。在这里我将其运用到了数据库的加密中。
Java中的DES加密算法是一种对称加密算法,它使用相同的密钥进行加密和解密。在实验过程中,我们可以通过以下步骤来实现DES加密:
- 生成密钥:使用Java的KeyGenerator类生成一个DES密钥。
- 创建加密器和解密器:使用Java的Cipher类创建一个加密器和解密器对象。
- 加密数据:使用加密器对象对需要加密的数据进行加密。
- 解密数据:使用解密器对象对加密后的数据进行解密。
要使用DES加密算法我们需要掌握Java中DES加密算法的基本原理和实现方法,以及异常处理和安全性等方面的知识。在这里我将DES加密运用到了消息的加密与解密当中。
而Java Socket通信是一种基于TCP/IP协议的网络通信方式,它可以用于在两个不同的计算机之间进行数据传输。在Socket通信中,一个计算机充当服务器,另一个计算机充当客户端,它们通过Socket对象进行数据传输。
在Java中,可以使用java.net包中的Socket和ServerSocket类来实现Socket通信。其中,ServerSocket类用于创建服务器端Socket对象,Socket类用于创建客户端Socket对象。
总的来说,Java Socket通信是一种简单而强大的网络通信方式,可以用于实现各种网络应用程序。但是,在实际应用中,需要注意网络安全和性能等方面的问题。
参考文献
[1]CSDN.不揭.DES加密算法[EB\OL].(2020-03-10)[2023-05-10] https://blog.csdn.net/fu_yunjian/article/details/104754202?spm=1001.2014.3001.5502
[2] CSDN.学全栈的灌汤包.Java网络编程 - TCP通信 [EB\OL].(2020-03-10)[2023-05-10] https://blog.csdn.net/m0_71485750/article/details/127720523
[3] CSDN.普通网友. Java生成MD5的两种方式 [EB\OL].(2022-08-18)[2023-05-10] https://blog.csdn.net/web13170611647/article/details/126401901