信息论大作业,用 Electron 写了个 RSA.Chat,用 1024 位 RSA 密钥对发出的消息用收信人的公钥加密,则除了收信人之外其他人不可解读,客户端和服务端通信用 socket.io,数据格式为 json。密钥生成和加解密都用 node-rsa。客户端 用了 vue.js 更新数据,jQuery 操作 DOM。



主要逻辑
客户端连接
客户端连接到服务端,客户端提交随机id,用户名和公钥到服务端,服务端每次收到配置信息都广播给所有人。客户端更新联系人列表。
客户端发信 & 服务端收信
要聊天的时候指定收信人信息,用收信人的消息加密,发送给服务端,服务端转发给对应的客户端。(理论上这里要用 room 的,每个客户端一个 room,所有和他有关的消息全部发给他。但是写的时候偷了个懒直接发给所有人了)
客户端收信
客户端收到消息后判断是否来自当前聊天的对象,是的话显示出来,不是的话对应的联系人未读加一。
如果改改改(无序)
- id 改为由服务端指定
- 服务端接数据库,暂存消息和联系人列表,之后可以不删除下线用户,还可以有好友关系,黑名单……扯远了
- 来自服务端的消息加签名验证
- 来自服务端的提示信息
- 真 · 私聊
- 酷炫的的界面
- 图片发送(这个貌似没必要加密)
- 客户端消息发送后本地还是显示原文的好,显示密文蛮诡异的
- 解决一些漏洞