在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Java语言基础 → sm2sm3sm4算法的java调用实现

sm2sm3sm4算法的java调用实现

Java语言基础

下载此实例
  • 开发语言:Java
  • 实例大小:0.03M
  • 下载次数:8
  • 浏览次数:94
  • 发布时间:2021-07-24
  • 实例类别:Java语言基础
  • 发 布 人:lvyunchuan
  • 文件格式:.zip
  • 所需积分:5
 相关标签: SM3 SM2 SM4

实例介绍

【实例简介】
sm2/sm3/sm4
基于国密算法(SM2 SM4 SM3)实现 server - client 安全通信协议。


SM2
秘钥格式
在本项目中 , 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
SM3
SM3摘要结果为256位,比平时使用的hash长128位,所以如果验签采用RSA算法的话需要验256位。
SM4
秘钥格式
SM4秘钥长度为32位的hex串,可以直接使用UUID随机生成的秘钥串,最好由客户端动态生产,保证每次对称加密的秘钥都是不同且是跟设备相关的。
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。在解密时需要根据最后一个字节去掉对应填充的数据。

【实例截图】

from clipboard

【核心代码】


标签: SM3 SM2 SM4

实例下载地址

sm2sm3sm4算法的java调用实现

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警