调整注释和readme

This commit is contained in:
zcy
2025-09-03 17:00:14 +08:00
parent 8880f2065e
commit 55332f6b3f
3 changed files with 21 additions and 103 deletions

106
README.md
View File

@@ -14,102 +14,16 @@ sudo apt-get install build-essential
---
# ZUC-256 Java 实现框架说明
本工程提供了一个 **分层、模块化的 ZUC-256 流密码算法框架**,按照 C 参考实现逻辑翻译为 Java 版本,便于后续在 JavaCard 环境中移植。
## 代码结构
# com.zuc.zuc256代码结构说明
```
com/iii/dragonstream/
├── Zuc256Tables.java // 常量表S盒、D数组
├── Zuc256State.java // 内部状态LFSR、R1、R2
├── Zuc256Util.java // 工具类U32转换、位运算、线性变换、打印
├── Zuc256Core.java // 算法核心(初始化、密钥字生成、密钥流生成)
├── Zuc256EncryptCtx.java // 加解密上下文(流密码分段处理)
├── Zuc256MacCtx.java // MAC 上下文骨架EIA3 类似流程)
└── Zuc256Demo.java // 演示主程序(明文→加密→解密→验证)
com.zuc.zuc256:
Zuc256Tables.java算法常量S 盒、D 数组)。
Zuc256State.java内部状态LFSR、R1、R2
Zuc256Util.java工具方法整数转换、位运算、线性变换、调试输出
Zuc256Core.java:算法核心(初始化、密钥字生成、密钥流生成)。
Zuc256EncryptCtx.java加解密上下文。
Zuc256MacCtx.javaMAC上下文。
Zuc256Demo.java演示程序明文加密、解密与结果验证
```
## 模块说明
### 1. `Zuc256Tables`
* 定义算法用到的 **S0/S1 S盒****常量数组 D**
* 这些表与 C 代码保持一一对应,只是存储在 Java 的 `static final int[]``int[][]` 中。
* **填表后即可使用**,不涉及逻辑。
---
### 2. `Zuc256State`
* 表示 ZUC-256 的 **运行时状态**
* 包含:
* `lfsr[16]`16 个 31bit LFSR 元素(用 int 保存,低 31 位有效);
* `r1, r2`:两个工作寄存器。
* 提供 `reset()` 方法清零。
---
### 3. `Zuc256Util`
* **通用工具函数集合**
* `getU32` / `putU32`:字节数组与 32bit 整数互转(大端);
* `add31`, `rot31`, `rot32`:位运算工具;
* `L1`, `L2`:线性变换骨架;
* `makeU31`, `makeU32`:拼接整数;
* `extractIv`25B → 23B IV 转换(按标准规则实现);
* `printHex`:调试用十六进制打印。
* **注意**JavaCard 环境中可去掉 `printHex`,避免额外依赖。
---
### 4. `Zuc256Core`
* **算法内核**
* `init`:根据 Key+IV 初始化状态LFSR、R1/R2、预运行若干轮
* `generateKeyword`:生成单个 32bit 密钥字;
* `generateKeystream`:批量生成密钥流。
* 该类仅依赖 `Zuc256State``Zuc256Tables`,是核心逻辑的承载处。
---
### 5. `Zuc256EncryptCtx`
* **流密码上下文**,封装加解密 API
* `init`:初始化状态;
* `update`:分段处理数据流,异或密钥流;
* `finish`:结束处理(流密码一般为空实现);
* `crypt`:一次性便利方法。
* 支持就地加解密,`in``out` 可相同。
---
### 6. `Zuc256MacCtx`
* **MAC 骨架**(对应 ZUC-EIA3
* 包含:
* `init`:初始化并设置 MAC 长度;
* `update`:累积输入数据;
* `finish`:输出认证标签。
* 暂未实现细节,留空位便于后续扩展。
---
### 7. `Zuc256Demo`
* **演示主程序**:完整展示 ZUC-256 加密/解密流程:
1. 准备明文、Key、IV
2. 初始化状态,加密生成密文;
3. 重新初始化状态,解密得到明文;
4. 打印结果并校验是否一致。
* 可直接运行验证整体流程是否正确。
---
---

View File

@@ -6,11 +6,9 @@ import static com.zuc.zuc256.Zuc256Util.extractIv;
import static com.zuc.zuc256.Zuc256Util.printHex;
// 一次性加密函数
/**
* 演示主函数:保持与你的单文件示例一致的调用路径。
* 演示主函数
*/
public final class Zuc256Demo {

View File

@@ -9,20 +9,26 @@ import static com.zuc.zuc256.Zuc256Util.putU32;
/**
* 分段加/解密上下文(流密码:同一流程)。
* 注意JavaCard 上尽量复用缓冲,避免额外分配。
* 加密上下文类
*/
public final class Zuc256EncryptCtx {
Zuc256State state = new Zuc256State();
byte[] buf = new byte[4];
Zuc256State state;
byte[] buf;
int buflen;
public Zuc256EncryptCtx(Zuc256State state, byte[] buf){
this.state = state;
this.buf = buf;
}
public Zuc256EncryptCtx(Zuc256State state){
this.state = state;
this.buf = new byte[4];
}
public Zuc256EncryptCtx(){
this.state = new Zuc256State();
this.buf = new byte[4];
}
// 初始化加密上下文