164 lines
4.4 KiB
Markdown
164 lines
4.4 KiB
Markdown
# 算法c语言代码
|
||
|
||
## 📦 环境准备
|
||
|
||
确保本地已安装:
|
||
- scons 构建工具,用于自动化编译流程。
|
||
- build-essential 包含 gcc、make 等基础编译工具的依赖包
|
||
```bash
|
||
# Ubuntu/Debian
|
||
sudo apt-get install scons
|
||
sudo apt-get install build-essential
|
||
```
|
||
|
||
---
|
||
0909 位置加密applet调用说明
|
||
|
||
1. E2 密钥存储接口
|
||
说明:
|
||
密钥长度为16或32B,加上密钥信息(4B)最多36B,按每个密钥40B存储在flash中。目前共分配了120B空间。(可存3个密钥)
|
||
遇相同(算法类型, 密钥ID, 密钥版本)密钥,覆盖存储;
|
||
新密钥存储在新空间;
|
||
密钥长度超长会报错,空间满会报错。
|
||
返回A1+5字节密文+9000
|
||
|
||
样例1
|
||
存储一个长度16,算法A1,id01,version02的Key[1122..FF00]
|
||
80 E2 00 01 14
|
||
13 A1 01 02 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF 00
|
||
|
||
/send 80E200011413A10102112233445566778899AABBCCDDEEFF00
|
||
->
|
||
90 00
|
||
|
||
|
||
样例2
|
||
存储一个长度32,算法A2,id02,version02的Key[0102..1F20]
|
||
80 E2 00 02 24
|
||
23 A2 02 02
|
||
01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10
|
||
11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20
|
||
|
||
/send 80E200022423A202020102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20
|
||
->
|
||
90 00
|
||
|
||
|
||
样例3
|
||
存储一个长度FF,算法A2,id02,version02的Key[0102..1F20]
|
||
80 E2 00 02 24
|
||
FF A2 02 02
|
||
01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10
|
||
11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20
|
||
/send 80E2000224FFA202020102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20
|
||
->
|
||
69 84 (超长 FF)
|
||
|
||
|
||
样例4
|
||
存储一个长度32,算法A2,id01,version02的Key[0102..1F20]
|
||
80 E2 00 02 24
|
||
23 A2 01 02
|
||
01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10
|
||
11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20
|
||
|
||
/send 80E200022423A202020102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20
|
||
->
|
||
90 00
|
||
|
||
样例4
|
||
存储一个长度16,算法A3,id02,version02的Key[0102..0F10],执行后空间满 120B
|
||
80 E2 00 02 14
|
||
13 A3 02 02
|
||
01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10
|
||
|
||
/send 80E200021413A302020102030405060708090A0B0C0D0E0F10
|
||
->
|
||
90 00
|
||
|
||
样例5
|
||
存储一个长度16,算法A3,id09,version02的Key[0102..0F10]
|
||
80 E2 00 02 14
|
||
13 A3 09 02
|
||
01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10
|
||
|
||
/send 80E200021413A309020102030405060708090A0B0C0D0E0F10
|
||
->
|
||
6A 84 空间满
|
||
|
||
|
||
样例6
|
||
存储一个长度16,算法A2,id02,version02的Key[0102..0F10](覆盖样例3空间)
|
||
80 E2 00 02 14
|
||
13 A2 02 02
|
||
01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10
|
||
|
||
/send 80E200021413A202020102030405060708090A0B0C0D0E0F10
|
||
->
|
||
90 00
|
||
|
||
--------
|
||
|
||
|
||
2. CA 位置加密
|
||
数据为1字节随机数,6字节STMSI,5字节数据
|
||
目前随机数和STMSI未使用,此接口用固定Key IV,对数据进行Zuc256加密,返回加密后数据。
|
||
|
||
// Key: 32字节
|
||
private static final byte[] KEY32 = {
|
||
(byte)0x30,(byte)0x31,(byte)0x32,(byte)0x33,(byte)0x34,(byte)0x35,(byte)0x36,(byte)0x37,
|
||
(byte)0x38,(byte)0x39,(byte)0x61,(byte)0x62,(byte)0x63,(byte)0x64,(byte)0x65,(byte)0x66,
|
||
(byte)0x30,(byte)0x31,(byte)0x32,(byte)0x33,(byte)0x34,(byte)0x35,(byte)0x36,(byte)0x37,
|
||
(byte)0x38,(byte)0x39,(byte)0x61,(byte)0x62,(byte)0x63,(byte)0x64,(byte)0x65,(byte)0x66
|
||
};
|
||
// IV: 25字节
|
||
private static final byte[] IV25 = {
|
||
(byte)0x30,(byte)0x31,(byte)0x32,(byte)0x33,(byte)0x34,(byte)0x35,(byte)0x36,(byte)0x37,
|
||
(byte)0x38,(byte)0x39,(byte)0x61,(byte)0x62,(byte)0x63,(byte)0x64,(byte)0x65,(byte)0x66,
|
||
(byte)0x67,(byte)0x30,(byte)0x31,(byte)0x32,(byte)0x33,(byte)0x34,(byte)0x35,(byte)0x36,
|
||
(byte)0x37
|
||
};
|
||
|
||
样例1
|
||
80 CA 00 00 0E
|
||
A1 0C 00 11 22 33 44 55 66 AA BB CC DD EE
|
||
|
||
/send 80CA00000EA10C00112233445566AABBCCDDEE
|
||
|
||
->
|
||
A1 06 01 9C 00 B3 15 05 90 00
|
||
|
||
|
||
样例2
|
||
80 CA 00 00 0E
|
||
A1 0C 00 11 22 33 44 55 66 FF 00 FF 00 FF
|
||
|
||
/send 80CA00000EA10C00112233445566FF00FF00FF
|
||
|
||
->
|
||
A1 06 01 C9 BB 80 C8 14 90 00
|
||
|
||
样例3
|
||
80 CA 00 00 0E
|
||
A1 0C 00 11 22 33 44 55 66 31 32 33 34 35
|
||
|
||
/send 80CA00000EA10C001122334455663132333435
|
||
|
||
->
|
||
A1 06 01 07 89 4C FC DE 90 00
|
||
|
||
---
|
||
|
||
# com.zuc.zuc256代码结构说明
|
||
```
|
||
com.zuc.zuc256:
|
||
Zuc256Tables.java:算法常量(S 盒、D 数组)。
|
||
Zuc256State.java:内部状态(LFSR、R1、R2)。
|
||
Zuc256Util.java:工具方法(整数转换、位运算、线性变换、调试输出)。
|
||
Zuc256Core.java:算法核心(初始化、密钥字生成、密钥流生成)。
|
||
Zuc256EncryptCtx.java:加解密上下文。
|
||
Zuc256MacCtx.java:MAC上下文。
|
||
Zuc256Demo.java:演示程序(明文加密、解密与结果验证)。
|
||
```
|
||
|
||
--- |