## 1. 项目简介
基于国密算法(SM2+SM3+SM4)实现的安全通信协议加解密。
## 2. 算法介绍
### 2.1 SM2
#### 2.1.1 秘钥格式
在本项目中 , SM2算法中秘钥都是在DER编码下输出的 , SM2秘钥的组成部分有:私钥D 、公钥X 、 公钥Y,他们都可以用长度为64的16进制的HEX串表示。
在加解密调用的时候都会将hexString转换成byte[]后再作为参数传入。其中SM2公钥并不是直接由X+Y表示,而是额外添加了一个头,
比如在硬件加密机中这个头为:"3059301306072A8648CE3D020106082A811CCF5501822D03420004",软加密中的公钥头为"04"。
头的具体表示信息如下
```
30 (SEQUENCE TAG: SubjectPublicKeyInfo)
59 -len
30 (SEQUENCE TAG: AlgorithmIdentifier)
13 (SEQUENCE LEN=19)
06 (OID TAG: Algorithm)
07 - len
2A8648CE3D0201 (OID VALUE="1.2.840.10045.2.1": ecPublicKey/Unrestricted Algorithm Identifier) --
06 TAG: ECParameters:NamedCurve
08 -len
2A811CCF5501822D (OID VALUE="1.2.840.10045.3.1.7": 国密新曲线--Secp256r1/prime256v1) -- 变量
03 - STRING TAG: SubjectPublicKey:ECPoint
42 - len 66
00 - 填充bit数为0
04 - 无压缩 就代表公钥的 , 还需要有一个Head
```
#### 2.2 SM3
SM3摘要结果为256位,比平时使用的hash长128位,所以如果验签采用RSA算法的话需要验256位。
#### 2.3 SM4
##### 2.3.1 秘钥格式
SM4秘钥长度为32位的hex串,可以直接使用UUID随机生成的秘钥串,最好由客户端动态生产,保证每次对称加密的秘钥都是不同且是跟设备相关的。
##### 2.3.2 ECB模式和CBC模式
SM4加解密涉及到ECB模式和CBC模式,ECB模式简单有利于计算,但是存在被攻击的可能,CBC模式更加安全,需要在加解密的过程中需要传入一个IV值,需要和客户端约定保持统一。
在本项目中IV值均设置为16进制下的字符串:"31313131313131313131313131313131",其实就是UTF-8下的16个"1" 通过getBytes[].toHexString()得来的,这个值可以根据需要修改。
在SM4加密算法中,要求原始数据长度必须是长度为32的整数倍hex串,但是在实际情况中数据长度并不能保证这么长,这里就涉及到了原始数据填充的问题。
在类SM4.java文件中padding()方法使用基于PBOC2.0的加解密数据填充规范,在数据后填充对应缺少位数个值,每个值均是该数值的hex表示,来解决分组时长度不足的问题。
如:缺少15位则填充15位0x0f。在解密时需要根据最后一个字节去掉对应填充的数据。
#### 2.4 Quick Start
- 示例代码详见: [SmTest](https://github.com/NaraLuwan/sm2sm3sm4/blob/main/src/test/java/luwan/sm/SmTest.java)
## 3. 项目结构
```text
sm2sm3sm4
└─src
├─main
│ └─java
│ └─luwan
│ ├─sm
│ │ └─base
│ │ BaseUtil.java
│ │ Constant.java
│ │ ErrorCode.java
│ │ SmException.java
│ │
│ ├─sm2
│ │ Cipher.java
│ │ SM2.java
│ │ SM2Key.java
│ │ SM2Sign.java
│ │ SM2SignFactory.java
│ │ SM2SignResult.java
│ │ SM2SignUtil.java
│ │ SM2Util.java
│ │
│ ├─sm3
│ │ SM3Util.java
│ │
│ └─sm4
│ SM4.java
│ SM4Context.java
│ SM4Util.java
│
└─test
└─java
└─luwan
└─sm
SmTest.java
```
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【作品名称】:基于国密算法(SM2+SM3+SM4)实现的安全通信协议加解密 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:SM3摘要结果为256位,比平时使用的hash长128位,所以如果验签采用RSA算法的话需要验256位。 2.3 SM4 2.3.1 秘钥格式 SM4秘钥长度为32位的hex串,可以直接使用UUID随机生成的秘钥串,最好由客户端动态生产,保证每次对称加密的秘钥都是不同且是跟设备相关的。 2.3.2 ECB模式和CBC模式 SM4加解密涉及到ECB模式和CBC模式,ECB模式简单有利于计算,但是存在被攻击的可能,CBC模式更加安全,需要在加解密的过程中需要传入一个IV值,需要和客户端约定保持统一。 在本项目中IV值均设置为16进制下的字符串:"3131313131313131313131313 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础能够看懂代码,能够自行调试代码并解决报错,能够自行添加功能修改代码。
资源推荐
资源详情
资源评论
收起资源包目录
sm2sm3sm4.zip (20个子文件)
sm2sm3sm4
pom.xml 2KB
src
test
java
luwan
sm
SmTest.java 1KB
main
java
luwan
sm2
SM2SignFactory.java 6KB
SM2SignResult.java 220B
SM2.java 3KB
SM2Key.java 1KB
SM2Util.java 4KB
SM2Sign.java 3KB
Cipher.java 3KB
SM2SignUtil.java 4KB
sm3
SM3Util.java 820B
sm
base
BaseUtil.java 20KB
ErrorCode.java 741B
SmException.java 336B
Constant.java 242B
sm4
SM4.java 10KB
SM4Util.java 2KB
SM4Context.java 405B
.gitignore 286B
README.md 4KB
共 20 条
- 1
资源评论
小英子架构
- 粉丝: 993
- 资源: 3861
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功