Files
se-algo/README.md

164 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 算法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算法A1id01version02的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算法A2id02version02的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算法A2id02version02的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算法A2id01version02的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算法A3id02version02的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算法A3id09version02的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算法A2id02version02的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字节STMSI5字节数据
目前随机数和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.javaMAC上下文。
Zuc256Demo.java演示程序明文加密、解密与结果验证
```
---