这是一个优化后的简化AES(SAES)加密算法实现。SAES是一个教学用的简化版AES算法,使用16位数据块和16位密钥。
-
代码结构优化
- 模块化设计,将功能分离到不同的工具类
- 统一的工具类(GF2_4、KeyExpansion、MatrixUtils、ConversionUtils)
- 核心算法封装在SAESCore类中
-
代码质量提升
- 完善的错误处理和输入验证
- 详细的JavaDoc注释
- 清晰的变量命名和代码组织
-
性能优化
- 使用对数表加速GF(2^4)乘法运算
- 减少不必要的字符串操作
- 优化矩阵操作
-
功能完整性
- 支持二进制文本加密解密
- 支持ASCII文本加密解密
- 完整的测试用例
SAES_Optimized/
├── src/
│ └── saes/
│ ├── core/
│ │ └── SAESCore.java # 核心加密解密算法
│ ├── utils/
│ │ ├── GF2_4.java # GF(2^4)有限域运算
│ │ ├── KeyExpansion.java # 密钥扩展
│ │ ├── MatrixUtils.java # 矩阵操作工具
│ │ └── ConversionUtils.java # 数据转换工具
│ ├── test/
│ │ └── SAESTest.java # 测试类
│ └── SimplifiedAES.java # 主类,提供加密解密接口
└── README.md
import saes.SimplifiedAES;
// 二进制加密解密
String key = "2D55";
String plaintext = "0000000000000000";
String ciphertext = SimplifiedAES.encryptBinary(plaintext, key);
String decrypted = SimplifiedAES.decryptBinary(ciphertext, key);
// ASCII文本加密解密
String asciiPlaintext = "Hello, SAES!";
String asciiCiphertext = SimplifiedAES.encryptASCII(asciiPlaintext, key);
String asciiDecrypted = SimplifiedAES.decryptASCII(asciiCiphertext, key);# 编译
javac -d bin -sourcepath src src/saes/**/*.java
# 运行主程序
java -cp bin saes.SimplifiedAES
# 运行测试
java -cp bin saes.test.SAESTestencryptBinary(String plaintext, String key)- 加密16位二进制文本decryptBinary(String ciphertext, String key)- 解密16位二进制文本encryptASCII(String plaintext, String key)- 加密ASCII文本decryptASCII(String ciphertext, String key)- 解密ASCII文本
plaintext/ciphertext:- 二进制模式:16位二进制字符串(如 "0000000000000000")
- ASCII模式:任意长度的ASCII字符串
key: 4位十六进制密钥(如 "2D55")
SAES算法流程:
- 密钥扩展:将16位密钥扩展为6个8位子密钥
- 初始轮密钥加:明文与初始密钥异或
- 第一轮:
- 半字节代替(S-box)
- 行位移
- 列混淆
- 轮密钥加
- 第二轮:
- 半字节代替(S-box)
- 行位移
- 轮密钥加
解密过程是加密过程的逆操作。
运行 SAESTest 类可以执行以下测试:
- 基本二进制加密解密
- ASCII文本加密解密
- 不同密钥测试
- 长文本加密解密
- 边界情况测试
- 密钥必须是4位十六进制字符串(0-9, A-F)
- 二进制明文/密文必须是16位
- ASCII文本会自动按16位块分组处理
- 输入验证失败会抛出
IllegalArgumentException
- 版本:1.0.0
- 作者:优化版本
- 日期:2025
本项目仅用于教学和学习目的。