国密算法及简单使用

简介: 国密算法,即国家密码局认定的国产密码算法,主要用于保护国家关键信息基础设施和商业领域的加密通信和数据安全。根据 2019年10月26日第十三届全国人民代表大会常务委员会第十四次会议通过的《中华人民共和国密码法》,国家对密码实行分类管理,密码分为核心密码、普通密码和商用密码

一、国密算法是什么?


国密算法,即国家密码局认定的国产密码算法,主要用于保护国家关键信息基础设施和商业领域的加密通信和数据安全。根据 2019年10月26日第十三届全国人民代表大会常务委员会第十四次会议通过的《中华人民共和国密码法》,国家对密码实行分类管理,密码分为核心密码普通密码商用密码

核心密码、普通密码用于保护国家秘密信息,核心密码保护信息的最高密级为绝密级,普通密码保护信息的最高密级为机密级。

核心密码、普通密码属于国家秘密。

商用密码用于保护不属于国家秘密的信息。公民、法人和其他组织可以依法使用商用密码保护网络与信息安全。


二、商用密码的分类


以下国密算法都是应用于商用密码,核心密码和普通密码属于国家秘密,不公开

主要有:SM1SM2SM3SM4SM7SM9祖冲之密码(ZUC

  1. 对称加密算法:国密算法中的对称加密算法包括SM1SM4SM7、祖冲之密码(ZUC)等。这些算法使用相同的密钥进行加密和解密,适用于大量数据的高效加密和解密。
  2. 非对称加密算法:国密算法中的非对称加密算法包括SM2SM9。这些算法使用公钥和私钥进行加密和解密,提供了更高的安全性和数字签名功能。
  3. 杂凑算法:国密算法中的杂凑算法包括SM3。杂凑算法用于将任意长度的输入数据转换为固定长度的输出值,常用于验证数据的完整性和生成摘要。
  4. 密钥交换协议:国密算法中的密钥交换协议包括SM2 Key Exchange和SM9 Key Exchange。这些协议用于在通信双方之间安全地交换密钥,以实现加密通信的会话密钥的建立。
  5. 数字签名算法:国密算法中的数字签名算法包括SM2SM9。这些算法用于验证数据的真实性和完整性,并确保签名的不可伪造。

最常用的算法是SM2(非对称)、SM3(摘要)、SM4(对称),用于替换掉国际上常用的 RSA,MD5,AES,DES 等加密算法,实现算法的自主可控。

以上算法,除了SM1、SM7算法未公开以外,这两种主要通过加密芯片,外部需要通过其提供的接口调用,其余已公开,在商用密码检测中心可以下载到源码。


三、国密算法的使用


各种国密算法,已经有非常成熟的轮子了,根本无需自己动手,我们只需要调用即可。下面以hutool为例,如果还不知道 hutool 的话,出门左拐,打开百度

  1. 打开hutool文档,文档写的是非常非常详细了
  2. 引入依赖


<dependency>
  <groupId>org.bouncycastle</groupId>
  <artifactId>bcprov-jdk15to18</artifactId>
  <version>1.69</version>
</dependency>
  1. 注意这里 jdk15to18 的意思不是 jdk 15 ,而是1.5-1.8
    以下是maven中央仓库的描述


Overview
The Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms. This jar contains JCE provider and lightweight API for the Bouncy Castle Cryptography APIs for JDK 1.5 to JDK 1.8.
Bouncy Castle Crypto包是加密算法的Java实现。此 jar 包含 JCE 提供程序和轻量级 API,用于 JDK 1.5 到 JDK 1.8 的 Bouncy Castle Cryptography API。
  1. 开始调用
    SM2 是非对称加密,类似国际上的RSA算法,使用公钥加密,私钥解密
    当使用无参的构造函数时,默认使用随机生成的密钥对


  


         
  1. 也可以使用自定义的密钥对


String text = "我是一段测试aaaa";
KeyPair pair = SecureUtil.generateKeyPair("SM2");
byte[] privateKey = pair.getPrivate().getEncoded();
byte[] publicKey = pair.getPublic().getEncoded();
SM2 sm2 = SmUtil.sm2(privateKey, publicKey);
// 公钥加密,私钥解密
String encryptStr = sm2.encryptBcd(text, KeyType.PublicKey);
String decryptStr = StrUtil.utf8Str(sm2.decryptFromBcd(encryptStr, KeyType.PrivateKey));
  1. 签名和验签


String content = "我是Hanley.";
final SM2 sm2 = SmUtil.sm2();
String sign = sm2.signHex(HexUtil.encodeHexStr(content));
// true
boolean verify = sm2.verifyHex(HexUtil.encodeHexStr(content), sign);
  1. 当然,也可以使用自定义的密钥对来验签。
  2. SM3 是散列函数,类似于国际上的MD5,SHA,SHA256等,加密后不可逆,一般用于密码的存储,数字签名的验证等


//结果为:136ce3c86e4ed909b76082055a61586af20b4dab674732ebd4b599eef080c9be
String digestHex = SmUtil.sm3("aaaaa");
  1. SM4是对称加密,类似于国际上的AES、DES等


String content = "test中文";
SymmetricCrypto sm4 = SmUtil.sm4();
String encryptHex = sm4.encryptHex(content);
String decryptStr = sm4.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);


目录
相关文章
|
2月前
|
存储 弹性计算 算法
倚天产品介绍|倚天ECS加速国密算法性能
倚天ECS是阿里云基于平头哥自研数据中心芯片倚天710推出arm架构实例,采用armv9架构,支持SM3/SM4指令,可以加速国密算法性能。本文基于OpenSSL 3.2和Tongsuo 实测对比了倚天ECS g8y实例和Intel g7 实例国密性能。为用户选择ECS提供参考。
|
算法 应用服务中间件 Go
国密算法证书及CFCA操作流程
国密算法证书及CFCA操作流程
2946 0
|
11天前
|
算法 安全 Java
性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
【4月更文挑战第28天】性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
26 1
性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
|
存储 安全 算法
MySQL 数据库支持国密算法
数据库加密,作为杀手锏,是数据库底线防守的秘密武器,通过在数据库存储层进行数据加密处理,达到即使数据被黑客盗取也无法解密的效果,从根源上解决数据泄露问题。 近年,市场对于数据库加密产品的需求呈上升趋势,但由于技术门槛极高,国内真正能够提供此类产品的企业本就寥寥无几,尤其针对全球份额排名第二的MySQL数据库,能够对其支持的加密产品一直没有出现。 不同于传统的视图+触发器模式的透明加密方式,本文所提MySQL国密加密产品采用数据库引擎代码改造技术,真正实现数据在存储层的加、解密功能,避免以往加密过程中,数据库文件导入导出的繁琐方法,最大程度减少性能损失。 产品是为用户需求而生,而我们要做的
1409 0
|
3月前
|
算法 安全 数据处理
【国密算法】深入理解国密算法:原理、实践及注意事项
【国密算法】深入理解国密算法:原理、实践及注意事项
|
3月前
|
存储 算法 安全
【国密算法】国密算法在Java中的实践
【国密算法】国密算法在Java中的实践
|
3月前
|
算法 安全 物联网
【国密算法】理解国密算法的基础概念
【国密算法】理解国密算法的基础概念
|
5月前
|
算法 安全 网络安全
即时通讯安全篇(十三):信创必学,一文读懂什么是国密算法
本文将尽量以通俗易懂的文字,为你分享国密算法的种类、技术原理和应用场景等。
347 0
|
11月前
|
存储 算法 安全
一文带你学习“国密算法”
一文带你学习“国密算法”
745 3
一文带你学习“国密算法”
|
10月前
|
存储 弹性计算 算法
倚天ECS加速国密算法性能
倚天ECS是阿里云基于平头哥自研数据中心芯片倚天710推出arm架构实例,采用armv9架构,支持SM3/SM4指令,可以加速国密算法性能。本文基于OpenSSL 3.2和Tongsuo 实测对比了倚天ECS g8y实例和Intel g7 实例国密性能。为用户选择ECS提供参考。