11ded99daab187b6545029f453c74cceea7da501
项目概览
这是一个现代化的实时聊天系统,采用客户端-服务器架构,具备端到端加密功能。
技术架构
前端技术栈
- 框架: 原生 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
项目亮点
- 安全性: 实现了真正的端到端加密,即使服务器也无法解密消息内容
- 用户体验: 类 Telegram 的现代化 UI,流畅的交互体验
- 技术先进性: 使用现代 JavaScript 特性,模块化架构
- 跨平台: 完美支持桌面和移动端
- 可扩展性: 清晰的模块划分,易于功能扩展
启动方式
# 开发模式
npm run dev
# 生产构建
npm run build
# Docker 部署
docker build -t nodecrypt .
docker run -p 80:80 nodecrypt
Description
🔒True end-to-end encrypted (E2EE) chat system in web. 🔒真正的网页端到端加密聊天系统
https://nodecrypt.shuaiplus.workers.dev/
13 MiB
0 Stars
1 Watchers
0 Forks
Languages
JavaScript
75.2%
CSS
17.7%
HTML
5.5%
Dockerfile
1.6%