国密(GmSSL)算法SM4之GCM模式

这篇具有很好参考价值的文章主要介绍了国密(GmSSL)算法SM4之GCM模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

国密(GmSSL)算法SM4之GCM模式



前言

本文将介绍如何使用java实现SM4算法的GCM模式加解密,并提供相应的代码示例。加解密底层实现基于gmssl c 实现,通过java native方式调用。参考关志老师的国密算法实现:https://github.com/guanzhi/GmSSL


一、概念

1.初始向量(IV,Initialization Vector)

SM4 GCM模式是一种加密算法和模式的组合。SM4是一种对称加密算法,也被称为国密算法,由中国国家密码管理局(State Cryptography Administration)发布。它是一种分组密码,每个分组的大小为128位。GCM(Galois/Counter Mode)是一种加密模式,用于将加密算法与消息认证码(MAC)相结合,以提供加密和完整性保护。
GCM(Galois/Counter Mode)是一种加密模式,它结合了CTR模式和GMAC(Galois Message Authentication Code)进行消息加密和认证,不需要进行加密块填充。在GCM模式中,使用CTR模式对消息进行加密,然后使用GMAC算法生成认证标签。
总体而言,SM4 GCM模式提供了一种安全的加密和认证机制,适用于保护数据的机密性和完整性。

2.初始向量(IV,Initialization Vector)

作用和MD5的“加盐”有些类似,目的是防止同样的明文块,始终加密成同样的密文块。

3.附加消息(AAD,Additional Authenticated Data)

附加消息(AAD,Additional Authenticated Data)是在加密算法中使用的一种输入类型。它是一些与加密数据相关但不需要加密的附加信息。附加消息不会被加密,但会与加密数据一起进行认证。
在GCM模式中,附加消息是可选的输入,用于提供额外的上下文信息。它可以包含与加密数据相关的任何元数据,如协议版本、会话标识符等。附加消息对于验证数据的完整性非常有用,因为它们会被包含在消息认证码(MAC)计算中。
需要注意的是,附加消息不会被加密,只会与加密数据一起进行认证。因此,附加消息不会对加密数据的保密性产生影响,只用于提供额外的认证信息。

4.认证标签

在SM4 GCM模式中,认证标签是由GMAC(Galois Message Authentication Code)算法生成的固定长度值。它用于验证加密数据的完整性和认证数据的真实性。

认证标签是通过将GMAC算法应用于加密数据以及其他参数(如随机数和相关数据)来计算得出的。它通常是一系列具有固定长度的比特,例如128比特或96比特。

接收加密数据的一方可以使用相同的参数和接收到的认证标签来验证数据在传输过程中是否被篡改。如果计算得出的认证标签与接收到的标签匹配,表示数据完整且真实。否则,表示数据可能已被修改或损坏。

二、实现思路

1.加密

代码如下(示例):

        String testStr="gmssl";
        byte[] palaintextByte=testStr.getBytes();
        int blockLength= (int)Math.ceil((palaintextByte.length+taglen)/(double)Sm4.BLOCK_SIZE);
        byte[] tempCiphertextByte=new byte[blockLength*Sm4.BLOCK_SIZE];
        int cipherlen;
        sm4gcm.init(key, iv, aad, taglen, true);
        cipherlen = sm4gcm.update(palaintextByte, 0, palaintextByte.length, tempCiphertextByte, 0);
        cipherlen += sm4gcm.doFinal(tempCiphertextByte, cipherlen);
        byte[] ciphertextByte = Arrays.copyOfRange(tempCiphertextByte,0,cipherlen);
        //System.out.println("ciphertext:"+HexUtil.byteToHex(ciphertextByte));
        Assert.assertNotNull("data is empty exception!",ciphertextByte);

"taglen"参数用于指定认证标签(authentication tag)的长度。认证标签是由GMAC算法生成的固定长度的值,用于验证加密数据的完整性和认证数据的真实性。 "taglen"参数决定了认证标签的长度,通常以比特(bits)为单位。较长的认证标签长度可以提供更高的安全性,但同时也会增加计算和存储的开销。

缓冲区块大小的长度设置为加密块大小的整数倍,并且大于明文长度+认证标签长度。


2.解密

代码如下(示例):

		String test_plaintext="gmssl";
        String test_hex_ciphertext="b4a20037dc223f3e3474304dbb464a86423fa6c6db";
        byte[] ciphertextByte=HexUtil.hexToByte(test_hex_ciphertext);
        byte[] tempPlaintextByte = new byte[ciphertextByte.length+taglen];
        sm4gcm.init(key, iv, aad, taglen, false);
        int plainlen = sm4gcm.update(ciphertextByte, 0, ciphertextByte.length, tempPlaintextByte, 0);
        plainlen += sm4gcm.doFinal(tempPlaintextByte, plainlen);
        byte[] plaintextByte = Arrays.copyOfRange(tempPlaintextByte,0,plainlen);
        String plaintext=new String(plaintextByte);

解密时明文大小与加密时缓冲区块大小基本一致。


总结

本文是国密算法java实现的一系列文章内容之一。欢迎各位家人们观赏并提供宝贵意见,如您对此文章感兴趣欢迎关注和交流。GmSSL密码库的Java语言封装文章来源地址https://www.toymoban.com/news/detail-744390.html

到了这里,关于国密(GmSSL)算法SM4之GCM模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Go实现国密算法SM2、SM3、SM4

    SM2椭圆曲线公钥密码算法 Public key cryptographic algorithm SM2 based on elliptic curves 遵循的SM2标准号为: GM/T 0003.1-2012、GM/T 0003.2-2012、GM/T 0003.3-2012、GM/T 0003.4-2012、GM/T 0003.5-2012、GM/T 0009-2012、GM/T 0010-2012 依赖包: github.com/tjfoc/gmsm/sm2 SM3密码杂凑算法 - SM3 cryptographic hash algorithm 遵循的SM

    2024年02月15日
    浏览(47)
  • 国密算法概述、及算法的集成应用(sm2、sm3、sm4)

    由于项目的需求,需要集成国密加解密,于是对国密又温故知新了一遍。同时整理了一下国密的一些算法。 本文主要从国密相关算法的简介、应用系统的集成、工具类的封装等方面入手,对国密进行深入的学习。 为了保障商用密码的安全性,国家密码局制定了一系列密码标

    2024年02月14日
    浏览(71)
  • 基于hutool 封装国密sm2,sm4 加解密算法

    基于hutool 封装国密sm2,sm4 加解密算法 1. 加入依赖包 2. 编码

    2024年02月13日
    浏览(47)
  • vue中使用国密算法SM2、SM3、SM4

    gm-crypto相关文档:https://gitcode.net/mirrors/byte-fe/gm-crypto?utm_source=csdn_github_accelerator vue3+element ui例子:https://gitee.com/huanglgln/vue-sys-manage-el  vue3+view ui例子:https://gitee.com/huanglgln/vue-sys-manage  vue3+Ant Design Vue ui例子:https://gitee.com/huanglgln/vue-sys-manage-adv 

    2024年02月15日
    浏览(52)
  • java 国密算法工具类(支持SM2 SM3 SM4)

    前言 工具采用BC库实现,支持前后端加解密,前端建议使用sm-crypto 引入pom依赖 基本使用如下 国密SM2算法 国密SM3算法 国密SM4算法使用

    2024年02月13日
    浏览(49)
  • 国密算法 SM4加密算法 Python完整实现

    SM4算法是一种 对称加密算法 ,也被称为国密算法。它是由中国密码学家设计的,已被列入国家密码局的标准。 SM4算法使用 128位的密钥和分组大小 ,使用 32轮迭代 加密,可以用于加密数据和验证消息认证码。它的加密效率很高,安全性也很好,被广泛应用于各种安全领域,

    2024年02月11日
    浏览(52)
  • 国密算法-SM4加解密工具类

    运行结果:

    2024年02月11日
    浏览(50)
  • 国密算法 SM4 加解密 java 工具类

    👑 博主简介:知名开发工程师 👣 出没地点:北京 💊 2023年目标:成为一个大佬 ——————————————————————————————————————————— 版权声明:本文为原创文章,如需转载须注明出处,喜欢可收藏! 我国国家密码管理局陆续发

    2024年02月11日
    浏览(36)
  • 国密算法SM2,SM3,SM4-java实现原理

    SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法,基于ECC。其签名速度与秘钥生成速度都快于RSA,非对称加密,该算法已公开 SM3是中华人民共和国政府采用的一种密码散列函数标准,由国家密码管理局于2010年12月17日发布。SM3主要用数字签名及验证、消息认

    2024年02月13日
    浏览(39)
  • Python实现国家商用密码算法sm2/sm3/sm4/sm9(国密)

    2010 年开始,我国国家密码管理局就已经开始陆续发布了一系列国产加密算法,这其中就包括 SM1、SM2、SM3 、SM4、SM7、SM9、ZUC(祖冲之加密算法)等,SM 代表商密,即商业密码,是指用于商业的、不涉及国家秘密的密码技术。SM1 和 SM7 的算法不公开,其余算法都已成为 ISO/IEC

    2024年02月15日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包