本项目是通信工程专业选修课的大作业成果。旨在设计并实现一个基于 Web 的加密算法可视化教学演示系统。
系统采用纯前端架构(HTML/CSS/JS),集成了从经典密码学(如凯撒密码)到现代分组密码(如 AES)以及视觉密码等多种算法。通过交互式的操作面板和动态的过程可视化,直观地展示了数据加密标准、密钥扩展、异或运算(XOR)、置换-替换网络(SPN)等核心密码学原理。
系统包含以下 9 种主流与经典加密/哈希算法的完整实现与可视化:
- 凯撒密码 (Caesar Cipher): 经典的单表替换算法,支持自定义偏移量与模 26 运算演示。
- 一次性密码本 (One-Time Pad, OTP): 演示信息论安全(Perfect Secrecy)的原理,实现基于字符的模运算或异或操作。
- Playfair 密码: 基于 5x5 矩阵的双字母替换密码(Digraph Substitution),演示矩阵生成与行列置换规则。
- 流密码 (Stream Cipher / RC4-XOR): 基于伪随机数生成器 (PRNG) 产生密钥流,演示明文流与密钥流的逐字节异或过程。
- DES (Data Encryption Standard): 经典分组密码,完整展示 Feistel 网络结构、16 轮迭代、S 盒替换及子密钥生成过程。
- AES-256 (Advanced Encryption Standard): 现代分组密码标准,演示 SPN 结构,包括字节代换 (SubBytes)、行移位 (ShiftRows)、列混合 (MixColumns) 及轮密钥加 (AddRoundKey)。
- 视觉密码 (VCS, Visual Cryptography): 实现 (2, 2) 门限方案,利用像素扩展技术将图像分解为两张分存图 (Shares),演示基于人眼视觉系统的物理叠加解密。
- 扩展视觉密码 (EVCS): 在 VCS 基础上提供新的视觉加密变体,支持生成更具可读性的分享图/载体图,演示扩展方案的像素映射流程。
- MD5 (Message Digest 5): 演示单向哈希函数的摘要生成与碰撞风险科普(仅用于教学演示,不用于安全场景)。
- RSA 公钥密码: 展示密钥生成(质数选择、模数 N、e/d 计算)、加/解密与签名验证的基本流程(教学演示版本)。
- 用户认证模拟: 实现基于 SHA-256 加盐哈希 (Salted Hash) 的登录与注册流程,模拟真实安全环境下的密码存储(非明文存储)。
- 后台管理: 提供管理员面板,支持查看用户列表、重置密码及权限管理(普通用户/管理员)。
- 主题切换: 支持明亮/暗黑模式 (Light/Dark Mode) 切换,适配不同演示环境。
- 核心语言: JavaScript (ES6+), HTML5, CSS3
- 数据存储: LocalStorage / SessionStorage (纯前端模拟数据库,无后端依赖)
- 加密库: 原生实现各算法逻辑,辅助功能使用 Web Crypto API (SHA-256)。
本项目为纯静态网页应用,无需安装 Node.js 环境或配置数据库。
- 下载/解压 项目文件夹。
- 双击打开根目录下的
index.html文件即可运行。 - 默认管理员账号(用于演示):
- 用户名:
admin - 密码:
admin
- 用户名:
.
├── css/
│ └── style.css # 全局样式定义,包含 CSS Variables 主题配置
├── docs/ # 算法原理文档 (Markdown 格式)
│ ├── aes.md
│ ├── des.md
│ ├── caesar.md
│ ├── ...
├── js/
│ ├── algorithms/ # 核心算法实现目录
│ │ ├── aes.js # AES-128/256 实现 (SPN 结构)
│ │ ├── des.js # DES 实现 (Feistel 结构)
│ │ ├── stream.js # 流密码实现 (RC4 变体)
│ │ ├── caesar.js # 凯撒密码
│ │ ├── onetimepad.js # 一次性密码本
│ │ ├── playfair.js # Playfair 密码
│ │ ├── vcs.js # 视觉密码 (VCS)
│ │ ├── evcs.js # 扩展视觉密码 (EVCS)
│ │ ├── md5.js # MD5 哈希演示
│ │ ├── rsa.js # RSA 公钥密码演示
│ │ ├── ...
│ ├── auth.js # 用户认证类 (SHA-256 加盐哈希)
│ ├── data.js # 静态内容加载与配置
│ ├── main.js # 入口逻辑与 DOM 事件绑定
│ ├── theme.js # 主题切换逻辑
│ └── utils.js # 工具函数 (Hex转换, Clipboard 等)
└── index.html # 系统主页入口
- DES: 严格遵循 FIPS 46-3 标准。实现了 64 位块处理,通过初始置换 (IP) 和逆初始置换 (FP) 封装 16 轮 Feistel 迭代。代码中显式展示了每一轮的 L/R 寄存器状态。
- AES: 实现了 GF(2^8) 有限域上的多项式乘法用于列混合 (MixColumns)。通过查找表 (S-Box) 优化字节代换效率。支持加密与解密的逆运算流程。
-
采用类似 RC4 的 KSA (密钥调度算法) 和 PRGA (伪随机生成算法) 产生密钥流。
-
强调了流密码中“禁止密钥重用”的安全原则(虽然演示中允许用户手动输入,但在文档中强调了 Nonce/IV 的必要性)。
- 利用 HTML5 Canvas API 进行像素级操作。
- 预处理: 将上传图片灰度化并二值化(Binarization)。
- 分发: 遍历二值化矩阵,根据 (2, 2) 方案的概率矩阵生成两张扩展后的噪点图。
- 恢复: 通过 Canvas 的
ImageData模拟两张胶片的物理叠加效果(逻辑 OR 运算模拟光线遮挡)。
- RSA: 以简化的教学流程演示密钥生成(选取大质数 p、q,计算 N、φ(N)、选择 e 并求解 d),以及基于模幂运算的加解密/签名验证。
- MD5: 展示将任意长度消息压缩为 128 位摘要的过程,用于科普单向性与碰撞风险(提醒:实际安全应用不推荐使用 MD5)。
- 本项目代码主要用于教学演示与学术交流,展示算法内部逻辑与数学原理。
- 在实际生产环境中,请勿直接使用本项目中的算法实现(特别是 JS 原生的 DES/RC4 实现),应使用经过严格审计的工业级密码库(如 OpenSSL, Web Crypto API)。
Author: ZZ Course: 通信工程专业选修课 - 信息安全技术