Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SAES (Simplified AES) 优化版本

项目简介

这是一个优化后的简化AES(SAES)加密算法实现。SAES是一个教学用的简化版AES算法,使用16位数据块和16位密钥。

主要优化点

  1. 代码结构优化

    • 模块化设计,将功能分离到不同的工具类
    • 统一的工具类(GF2_4、KeyExpansion、MatrixUtils、ConversionUtils)
    • 核心算法封装在SAESCore类中
  2. 代码质量提升

    • 完善的错误处理和输入验证
    • 详细的JavaDoc注释
    • 清晰的变量命名和代码组织
  3. 性能优化

    • 使用对数表加速GF(2^4)乘法运算
    • 减少不必要的字符串操作
    • 优化矩阵操作
  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.SAESTest

API说明

SimplifiedAES类

静态方法

  • encryptBinary(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算法流程:

  1. 密钥扩展:将16位密钥扩展为6个8位子密钥
  2. 初始轮密钥加:明文与初始密钥异或
  3. 第一轮
    • 半字节代替(S-box)
    • 行位移
    • 列混淆
    • 轮密钥加
  4. 第二轮
    • 半字节代替(S-box)
    • 行位移
    • 轮密钥加

解密过程是加密过程的逆操作。

测试结果

运行 SAESTest 类可以执行以下测试:

  • 基本二进制加密解密
  • ASCII文本加密解密
  • 不同密钥测试
  • 长文本加密解密
  • 边界情况测试

注意事项

  1. 密钥必须是4位十六进制字符串(0-9, A-F)
  2. 二进制明文/密文必须是16位
  3. ASCII文本会自动按16位块分组处理
  4. 输入验证失败会抛出 IllegalArgumentException

版本信息

  • 版本:1.0.0
  • 作者:优化版本
  • 日期:2025

许可证

本项目仅用于教学和学习目的。

About

20230665 许昊宇

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages