• 初始替换:按照一定的规则替换输入的明文,生成新的分组。

  • 轮次功能:将上一轮生成的分组与本轮的子密钥进行异或运算,通过S盒和P盒进行替换和替换,生成新的分组。

  • 逆排列:将上一轮生成的分组按照一定的规则进行逆排列,得到最终的密文。
    SM1算法的安全性已得到广泛认可,已广泛应用于金融、电子政务、物联网等领域的数据加密和保护。

  • 3、SM2算法

    3.1、SM2算法简介

    SM2算法是中国密码学家自主设计的非对称加密算法。它是国家商用密码算法,具有高效、安全、公开、透明的特点。 SM2算法是一种基于椭圆曲线密码体制的公钥密码算法,应用于数字签名、密钥协商、加密等场景。

    SM2算法的安全性基于椭圆曲线离散对数问题,其密钥长度为256位,比RSA算法的密钥长度短,但安全性更高。 SM2算法不仅高效安全,而且公开透明、自主可控,符合国家信息安全要求。

    SM2算法用于数字签名、密钥协商、加密等场景。数字签名方面,SM2算法支持国家加密标准的数字证书和证书链,可用于保证电子文档的真实性和完整性;密钥协商方面,可采用SM2算法安全生成会话密钥,保证通信的机密性和完整性;在加密方面,可以采用SM2算法来保护敏感数据的机密性。

    SM2算法是一种高效、安全、开放、透明的密码算法,具有自主可控的特点。它是我国自主设计的重要密码算法。

    3.2、SM2算法原理

    SM2算法是一种基于椭圆曲线密码学的公钥密码算法,是中国密码算法标准的一部分。 SM2算法的实现原理如下:

    undefined

    SM2算法是一种非常安全高效的公钥密码算法,其安全性已得到广泛认可和验证。在实际应用中,我们需要遵循相关规范和标准来保证SM2算法的安全性和可靠性。

    3.4、SM2算法java应用

    在java中的实现如下:

    套餐com.公司.营地.加密;导入org .bouncycastle.加密.非对称密码密钥对;
    导入org.充气城堡.加密.密码参数;
    导入org.充气城堡.加密.CryptoException;
    导入org.充气城堡.加密.生成器.ECKeyPair生成器;
    导入org.充气城堡.加密.参数.ECDomain参数;
    导入org.充气城堡.加密.参数.ECKey生成参数;导入org.充气城堡.加密.参数.随机参数;
    导入org.充气城堡.加密.签名者.SM2签名者;
    导入org.充气城堡.jce.ECNamedCurveTable;
    导入org.充气城堡.jce.提供商.BouncyCastleProvider;
    导入org.充气城堡.jce.规格.ECNamedCurveParameterSpec;
    导入org.充气城堡.util .编码器.十六进制;导入java.安全性.SecureRandom; 导入java.安全.安全 ;/**** @description: SM2 算法* @copyright: @Copyright (c) 2022 * @company: Aiocloud* @author: pany* @version: 1.0.0 * @createTime: 2023-06-24 22:37*/public class SM2示例 {公共 静态 void 主要(字符串[] args) 抛出 CryptoException {安全.addProviderBouncyCastleProvider) );//生成密钥对非对称密码密钥对密钥对 = 生成密钥对();//纯文本消息byte[]消息= “你好,SM2!”.getBytes();//签名消息byte[]签名=签名(留言 ,密钥对.获取私人( ));//验证签名 boolean已验证= 验证(消息, 签名,密钥对.获取公共() );系统. .println("消息:"+字符串消息 ));系统.out.println("签名:"+十六进制到HexString(签名));系统.println("已验证:"+已验证);}私人静态 非对称密码密钥对 生成密钥对 () {//创建ECDomainParameters对象ECNamedCurveParameterSpecspec=  ECNamedCurveTable.getParameterSpec ("secp256k1");ECDomainParameters 域参数=  ECDomainParameters规格) .getCurve(),规格.getG (),规格 .getN(),规格getH( ));//定义密钥生成参数ECKeyGenerationParameters keyGenParams = new ECKeyGenerationParameters(domainParams, new  安全随机());//生成密钥对 ECKeyPairGenerator keyPairGenerator = EC密钥对生成器;密钥对生成器.init(keyGenParams) ;返回密钥对生成器.生成密钥对 ();}私有静态字节[] 标志 ( 字节[]消息,密码参数 privateKey) 抛出 CryptoException  {//定义SM2签名者SM2Signer签名者=SM2Signer;//初始化签名者signer.init(true,    随机参数 (私钥,安全随机( )));/ /计算签名签名者.更新(消息,0 ,消息.长度;返回签名者.生成签名(); }私有 静态 布尔值 验证(字节[]消息, byte[]签名,密码参数  publicKey) {//定义SM2签名 SM2Signer 签名者 =  SM2Signer ();//初始化签名者签名者.init(,公钥); //验证签名签名者.更新(消息, 0,消息.长度);返回签名者.验证签名(签名);}}
    

    4、SM3算法

    4.1、SM3算法简介

    SM3算法是中国密码学家设计的一种哈希算法。是国密算法之一,也是SHA-3算法的候选算法之一。 SM3算法的设计目标是提供一种高度安全、高效的哈希算法,适用于数字签名、身份验证、数据完整性验证等场景。 SM3算法的设计和实现经过严格的安全评估和测试,已广泛应用于政务、金融、电子商务等领域。

    SM3算法的核心思想是一种基于Merkle-Damgård结构的迭代哈希算法,其输入和输出都是固定长度的二进制字符串。 SM3算法的输入可以是任意长度的消息。经过填充、分组、迭代处理、输出处理等步骤,最终生成256位的哈希值。

    SM3算法的安全性主要基于以下几个方面:

    1. 消息填充:SM3算法采用类似于SHA-256的消息填充方法,可以有效避免碰撞攻击、长度扩展攻击等攻击。
    2. 迭代处理:SM3算法采用64轮迭代处理。每轮都包含多个基本操作,增加了攻击者的攻击难度。
    3. 位移、位移压缩和非线性函数:SM3算法使用了多种位移、位移压缩和非线性函数,增加了攻击者攻击的难度。

    总体来说,SM3算法是一种高度安全、高效的哈希算法,已在国内外各个领域得到广泛应用。是我国自主研发的密码算法之一。

    4.2、SM3算法原理

    SM3 算法是一种哈希函数,用于将任意长度的消息转换为固定长度的摘要。 SM3算法原理如下:

    1. 消息填充:SM3算法首先对输入消息进行填充,使消息长度满足一定的要求。填充过程包括添加一个 1 和几个 0,以及添加消息长度的二进制表示形式。
    2. 消息分组:将填充的消息分为若干个固定长度的组,每组长度为512位。
    3. 初始值设置:SM3算法使用一些常数和随机数来初始化哈希值。这些常数和随机数由国家密码动物管理局(CMCA)和国家密码动物管理局(NSA)联合指定。
    4. 压缩函数:SM3算法使用特定的压缩函数将每个数据包与当前的哈希值混合。压缩函数包括多轮迭代和一些逻辑运算,以保证哈希值的混淆和扩散。
    5. 最终处理:所有组处理完毕后,输出最终的哈希值作为消息的摘要。

    SM3算法的原理基于分组密码和哈希函数技术,使用一些复杂的数学运算和协议来保证安全性和可靠性。由于SM3算法具有较高的安全性和可靠性,因此被广泛应用于各种数字安全场景,如数字签名、消息认证等。

    4.3、SM3算法的安全性

    SM3算法是一种安全性得到广泛认可的哈希函数。以下是SM3算法的安全特性:

    1. 防冲突:SM3算法可以将任意长度的消息转换为固定长度的摘要,并且不同消息生成相同摘要的概率极小,因此SM3算法具有很高的防冲突能力。
    2. 抗原像攻击:SM3算法在不知道摘要的原始消息的情况下很难找到摘要对应的原始消息,因此对原像攻击有很高的抵抗能力。
    3. 抗二次原像攻击:SM3算法可以在已知一条消息的摘要的情况下很难找到另一条消息,使它们的摘要相同,因此对二次原像攻击具有很高的抵抗力。
    4. 可验证的安全性:SM3算法的安全性经过了严格的评估和验证,包括安全证明、攻击模型分析、实现安全等。这些验证保证了SM3算法的安全性和可靠性。

    SM3算法是一种非常安全高效的哈希函数,其安全性得到了广泛的认可和验证。在实际应用中,我们需要遵循相关规范和标准来保证SM3算法的安全性和可靠性。

    4.4、SM3算法java应用

    在java中的实现如下:

    套餐com.公司.营地.加密;导入org .充气城堡.加密SM3摘要;
    导入org.充气城堡.util.编码器.十六进制; /**** @description: SM3 算法* @copyright: @Copyright (c) 2022 * @company: Aiocloud* @author: pany* @version: 1.0.0 * @createTime: 2023-06-24 22:55* /public class SM3示例 {公共 静态字符串加密(字符串str){字节[]字节=str .getBytes();字节[]结果 =  字节[32];SM3Digest sm3 =SM3Digest() ;sm3.更新(字节,0, 字节.长度);sm3.doFinal(结果,0);返回十六进制.toHexString(结果);}公共 静态 空隙  main(字符串[]args){字符串字符串= "hello world";字符串 结果 = SM3示例.加密(str) ;系统.输出.println(结果) ;}}
    

    输出如下:

    处理完成并使用退出代码0

    5、SM4算法

    5.1、SM4算法简介

    SM4算法是一种对称加密算法,也称为国密算法。它是中国密码学家提出的一种分组密码算法。它被中国政府采用作为商业密码算法并纳入ISO/IEC标准。 SM4算法以其安全性和高效性得到了广泛认可,并已广泛应用于各种加密场景。

    SM4算法采用128位密钥和128位块长度,安全性高,加解密速度快。其加密过程包括4轮加密和4轮密钥扩展。解密过程与加密过程类似,但需要以相反的顺序进行。 SM4算法的密钥长度为128位,可以保证足够的安全性,并且便于密钥管理和存储。

    5.2、SM4算法特点

    SM4算法的特点如下:

    1. 高强度安全性:SM4算法采用分组密码结构。通过多轮迭代和替换操作,密文和明文之间的关系非常复杂,难以破解。
    2. 高效的加解密速度:SM4算法采用高效的S盒替换和线性变换,使得加解密速度更快,适合各种加密场景。
    3. 易于使用的密钥管理:SM4算法的密钥长度为128位,可以保证足够的安全性,并且方便密钥管理和存储。
    4. 适用于多种加密场景:SM4算法可应用于多种加密场景,包括数据加密、通信加密、电子签名、数字证书等。

    简单来说,SM4算法是一种安全性高、效率高、易用的加密算法,已广泛应用于各种加密场景。

    5.3、SM4算法的Java应用

    套餐com.公司.营地.加密;导入org .充气城堡.加密.引擎.SM4Engine;
    导入org.充气城堡.加密.参数.关键参数;
    导入org.充气城堡.util .编码器.十六进制; /**** @description: SM4算法* @copyright: @Copyright (c) 2022 * @company: Aiocloud* @author: pany* @version: 1.0.0 * @createTime: 2023-06-25 8:32* /public class SM4示例 {公共 静态 void 主要(字符串[]参数){字节[] = 十六进制.解码("0123456789abcdeffedcba9876543210");字节[]明文= 十六进制.解码("681edf34d206965e8 6b3e94f536e4246");SM4Engine发动机=SM4引擎();引擎.初始化(true,  关键参数关键;字节[]密文=  字节[明文.长度];发动机.processBlock(明文,0,密文,  0);系统.out.println("密文:"+  十六进制.到HexString密文);}}
    

    在本示例中,我们使用 Bouncy Castle 加密库来实现 SM4 算法。我们首先将密钥和明文转换为字节数组,然后初始化 SM4 引擎并使用密钥对其进行配置。最后,我们将明文传递给引擎进行加密,并将结果打印到控制台。

    运行结果:

    密码文本:f324184f3c8892b72bdc9d7c612919de处理完成退出代码0
    

    6、SM7算法

    SM7是中国密码算法标准的一部分,是一种对称密钥加密算法。它是在SM4算法基础上开发的,由中国密码动物管理局(CMCA)和国家密码管理办公室(NSA)联合发布。 SM7算法安全性更高,抗攻击能力更强,可用于保护国家秘密、商业秘密等重要信息。

    SM7算法采用与SM4算法类似的分组密码结构,但分组长度为256位。它使用新的密钥扩展算法来生成更强的密钥。此外,SM7还采用了新的替换算法来增强其抗攻击能力。

    SM7算法还具有多种加密模式,包括ECB、CBC、CFB和OFB等。还支持多种填充模式,包括零填充、PKCS#5填充、ISO/IEC 7816-4填充等。

    简单来说,SM7算法是一种非常安全的加密算法,可以用来保护各种重要信息。它已成为中国密码算法标准的一部分,并在国际上得到广泛认可和使用。

    目前SM7算法还没有开源的Java实现,因为SM7算法是中国密码算法标准的一部分,受到国家保密法的保护,所以它的实现和使用受到严格限制。

    7、SM9算法

    SM9算法是中国密码算法标准的一部分。它是一种基于椭圆曲线密码学的公钥密码算法,也称为“超越密码算法”。由中国密码动物管理局(CMCA)和国家密码动物管理局(NSA)联合发布,可用于数字签名、密钥交换、身份认证等应用场景。

    SM9算法的主要特点是高度的安全性、高效性和灵活性。它采用了全新的椭圆曲线加密算法,可以在保证安全性的同时提高加解密效率。此外,SM9算法还具有多种身份认证方式,包括基于ID的认证、基于证书的认证和基于密码的认证。

    SM9算法还支持多种密钥交换方法,包括基于Diffie-Hellman密钥交换的方法和基于椭圆曲线密码学的方法。它还具有多种数字签名方法,包括基于SM3哈希算法的数字签名和基于椭圆曲线密码学的数字签名。

    总之,SM9算法是一种非常安全、高效、灵活的公钥密码算法,适用于各种数字安全应用场景。它已成为中国密码算法标准的一部分,并在国际上得到广泛认可和使用。

    由于SM9算法是一种新的公钥密码算法,目前还没有公开的Java实现。

    💕💕本文由Torrent原创,首发于CSDN博客,博客主页https://www.hack95.com/qq_37967783?spm=1010.2135.3001.5421
    💕💕喜欢的话记得点赞喜欢就收藏吧