项目概览

这是一个现代化的实时聊天系统,采用客户端-服务器架构,具备端到端加密功能。

技术架构

前端技术栈

  • 框架: 原生 JavaScript (ES6+模块化)
  • 构建工具: Vite
  • 加密库: 自研 NodeCrypt.js 和 NodeCrypt2.js
  • UI设计: 类 Telegram 风格的响应式界面

后端技术栈

  • 运行时: Node.js
  • WebSocket: 实时通信协议
  • 加密: RSA + AES-256-CBC 混合加密
  • 部署: Docker + Nginx

核心加密机制

  • 密钥交换: 椭圆曲线 Diffie-Hellman (ECDH)
  • 对称加密: AES-256-CBC
  • 非对称加密: RSA (服务器身份验证)
  • 端到端: 客户端间直接加密通信

主要功能特性

🔒 安全特性

  • 端到端加密聊天
  • RSA 服务器身份验证
  • 客户端密钥生成和管理
  • 防 XSS 攻击(HTML 转义)

💬 聊天功能

  • 多房间支持(可同时加入多个聊天室)
  • 私聊模式(点击用户头像进入私聊)
  • 图片发送和预览(支持拖拽缩放)
  • 表情符号支持
  • 系统通知消息

🎨 用户体验

  • 自动头像生成: 基于用户名的 SVG 头像(使用 DiceBear API)
  • 响应式设计: 完美适配桌面和移动端
  • 拖拽调整: 侧边栏宽度可调
  • 智能输入框: 自动高度调整,支持多行输入
  • 未读消息提醒: 红色徽章显示未读数量

📱 移动端优化

  • 触摸友好的 UI 交互
  • 移动端专用侧边栏和遮罩
  • 自适应布局和字体大小
  • 防止页面拖动和缩放

核心模块分析

1. 房间管理 (room.js)

// 多房间状态管理
let roomsData = [];
let activeRoomIndex = -1;
  • 支持多房间同时在线
  • 房间切换和上下文恢复
  • 用户列表和消息历史管理

2. 聊天显示 (chat.js)

  • 消息渲染和类型处理
  • 图片预览模态框
  • 输入框占位符和自动增高
  • 粘贴纯文本处理

3. 用户界面 (ui.js)

  • 用户列表渲染
  • 移动端 UI 适配
  • 登录模态框管理
  • 设置面板交互

4. 工具库

  • util.dom.js: DOM 操作封装
  • util.string.js: 字符串处理和 HTML 转义
  • util.avatar.js: 头像生成
  • util.image.js: 图片处理
  • util.emoji.js: 表情选择器
  • util.settings.js: 设置管理

部署方案

Docker 部署

  • Dockerfile: 容器化配置
  • start.sh: 启动脚本(动态生成 RSA 密钥对)
  • Nginx: 静态文件服务和 WebSocket 代理

密钥管理

# 动态生成 RSA 密钥对
node /app/server/key-generate.js

项目亮点

  1. 安全性: 实现了真正的端到端加密,即使服务器也无法解密消息内容
  2. 用户体验: 类 Telegram 的现代化 UI,流畅的交互体验
  3. 技术先进性: 使用现代 JavaScript 特性,模块化架构
  4. 跨平台: 完美支持桌面和移动端
  5. 可扩展性: 清晰的模块划分,易于功能扩展

启动方式

# 开发模式
npm run dev

# 生产构建
npm run build

# Docker 部署
docker build -t nodecrypt .
docker run -p 80:80 nodecrypt
S
Description
🔒True end-to-end encrypted (E2EE) chat system in web. 🔒真正的网页端到端加密聊天系统
https://nodecrypt.shuaiplus.workers.dev/
Readme ISC
13 MiB
0 Stars 1 Watchers 0 Forks
Languages
JavaScript 75.2%
CSS 17.7%
HTML 5.5%
Dockerfile 1.6%