信息论大作业写了一个 RSA 加密的 E2EE 聊天软件

2016/06/04 | 2分钟阅读 | 更新于 2016/06/04

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

主要逻辑

客户端连接

客户端连接到服务端,客户端提交随机id,用户名和公钥到服务端,服务端每次收到配置信息都广播给所有人。客户端更新联系人列表。

客户端发信 & 服务端收信

要聊天的时候指定收信人信息,用收信人的消息加密,发送给服务端,服务端转发给对应的客户端。(理论上这里要用 room 的,每个客户端一个 room,所有和他有关的消息全部发给他。但是写的时候偷了个懒直接发给所有人了)

客户端收信

客户端收到消息后判断是否来自当前聊天的对象,是的话显示出来,不是的话对应的联系人未读加一。

如果改改改(无序)

  1. id 改为由服务端指定
  2. 服务端接数据库,暂存消息和联系人列表,之后可以不删除下线用户,还可以有好友关系,黑名单……扯远了
  3. 来自服务端的消息加签名验证
  4. 来自服务端的提示信息
  5. 真 · 私聊
  6. 酷炫的的界面
  7. 图片发送(这个貌似没必要加密)
  8. 客户端消息发送后本地还是显示原文的好,显示密文蛮诡异的
  9. 解决一些漏洞

END

Github https://github.com/bin16/RSA.Chat

© 2026 香蕉引擎故障报告

🌱 Powered by Hugo with theme Dream.

关于

要怎么介绍自己呢,🤔。

很早以前是作为 Web 前端在学习的,但是工作第一年就成为了全干工程师。喜欢尝试各种东西,什么都会一点。

一直很喜欢 Ebiten 游戏引擎 ,特别简洁,用它做过一些小东西,可以查看这个分类 。另外特别推荐这个木鱼 ,是一个相对完整的小玩意儿,包含手搓的一个简单的 UI 框架;支持鼠标和键盘操作;有多语言和主题切换功能;同时支持 Web 端和客户端。它的源代码在 bin16/wooden-fish

主题

网站基于 Hugo,当前使用的是 hugo-theme-dream 主题的修改版 ,根据我的需要,做了一些对 PaperMod 的兼容。

我自己也写过主题 ,但是没有别人写的好看。

正在从我的笔记中往外搬运内容

等待更新:

  • 从《锈湖》中学了些什么东西
  • 我拿 React 写解谜游戏的经过
  • 基于 Pocketbase 的 Pocket Memos
  • 数独!