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

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

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



前言

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


一、概念

1.SM4

SM4是一种国密对称加密算法。

2.ECB

ECB(Electronic Codebook)模式是一种基本的分组密码工作模式,用于将明文分割成固定大小的块并对每个块进行独立加密。在ECB模式下,每个明文块都会被独立地使用相同的密钥进行加密,因此相同的明文块会得到相同的密文块。这种一对一的加密方式使得ECB模式在某些情况下容易受到攻击,特别是当明文中存在重复的块时,攻击者可以通过观察和比较密文块来推断出明文的一些信息。由于这些安全性问题,ECB模式通常不推荐在实际应用中使用。更安全的替代模式包括CBC、CTR、OFB和CFB等。

3.pkcs5padding

PKCS5Padding是一种填充(Padding)方案,用于在对称加密算法中对数据进行块填充。它是公钥密码标准第5部分(PKCS#5)中定义的一种填充方式。PKCS5Padding的作用是将数据填充到加密算法所要求的块大小,以确保数据长度符合加密算法的要求。
在块密码中,加密算法通常要求明文数据长度为固定的块大小。PKCS5Padding通过在数据末尾添加填充字节,使得数据长度能够被块大小整除。 填充字节的值等于需要填充的字节数,例如需要填充3个字节,则填充字节为0x03。在解密时,可以通过检查最后一个字节的值来确定填充的字节数,并将其去除。特殊情况下,如果已经满足了块大小整倍数,按照PKCS5的规则,仍然需要在尾部填充,目的是为了加解密时统一处理填充。
PKCS5Padding是常见的填充方案之一,被广泛应用于各种加密算法和协议中,如AES、DES等。

二、功能实现

1.pkcs5padding

代码如下(示例):

    public static byte[] pkcs5padding(byte[] data, int blockSize) {
        int paddingLength = blockSize - (data.length % blockSize);
        byte[] padding = new byte[paddingLength];
        Arrays.fill(padding, (byte) paddingLength);
        byte[] result = new byte[data.length + padding.length];
        System.arraycopy(data, 0, result, 0, data.length);
        System.arraycopy(padding, 0, result, data.length, padding.length);
        return result;
    }

如数据长度刚好为加密块大小的倍数也需要进行填充,以方便解密时去除填充。


2.pkcs5Unpadding

代码如下(示例):

    public static byte[] pkcs5Unpadding(byte[] data) throws IllegalArgumentException {
        int paddingSize = data[data.length - 1];
        if (paddingSize <= 0 || paddingSize > data.length) {
            throw new IllegalArgumentException("Invalid pkcs#5 padding!");
        }
        for (int i = data.length - paddingSize; i < data.length; i++) {
            if (data[i] != paddingSize) {
                throw new IllegalArgumentException("Invalid pkcs#5 padding!");
            }
        }
        return Arrays.copyOfRange(data, 0, data.length - paddingSize);
    }

对密文去除填充,获取原始密文。


3.encrypt

代码如下(示例):

    public static byte[] encrypt(byte[] data, byte[] key) {
        byte[] ciphertext = new byte[data.length];
        Sm4 sm4 = new Sm4(key, true);
        for (int i = 0; i < data.length; i += Sm4.BLOCK_SIZE) {
            sm4.encrypt(data, i, ciphertext, i);
        }
        return ciphertext;
    }

按块大小进行加密并最终拼接成密文。


4.decrypt

代码如下(示例):

    public static byte[] decrypt(byte[] data, byte[] key) {
        byte[] plaintext=new byte[data.length];
        Sm4 sm4 = new Sm4(key, false);
        for (int i = 0; i < data.length; i += 16) {
            sm4.encrypt(data, i, plaintext, i);
        }
        return plaintext;
    }

按块进行解密,解密后去除填充获取明文数据。


总结

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

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

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

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

相关文章

  • Hutool工具进行SM4加密报错:No such algorithm: SM4/ECB/PKCS5Padding

    报错详情: 源码: 解决办法: maven应用的包版本不对: bc包需要1.69版本的,下面这组坐标可以解决这个问题。

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

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

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

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

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

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

    2024年02月13日
    浏览(39)
  • 使用 Java Bouncy Castle实现国密算法SM4、SM3以及SM2的加密

    国密算法的实现借助了Java库函数 Bouncy Castle,加密库安装使用教程请参考链接 SM4,又称为商密算法,是一种分组密码算法,于2012年由中国密码技术研究中心(中国密码学会成员)发布,目前已成为我国国家密码算法,并在多个领域得到了广泛的应用。SM4算法采用了32轮迭代结

    2024年02月16日
    浏览(62)
  • java运用SM4国密算法对文件的加密与解密的实现

    首先我们在idae开发工具导入导入pom.xml的两个必要依赖  jar包下载地址:百度网盘 请输入提取码   npn8  图上systemPath 为jar包的文件路径,我们需要使用以下的路径存储jar包。(也可以自己设置) java包的文件路径如图所示 然后创建所需要加密的文件 ,需要加密的文件内容,

    2024年03月27日
    浏览(49)
  • Delphi SM2/SM4国密算法

        最近忙个医保平台的项目,涉及SM2/SM4的签名,验签,加密,解密的业务操作过程。毕竟现在用Delpih的人不是很多,懂这方面的技术的人也更少,能涉及密码算法的少之更少,网上也能搜到一些开源的代码,也由于使用的人少,未加通过业务系统来验证,所以存在不少Bu

    2024年02月11日
    浏览(47)
  • vue前端国密SM2, SM4 算法实现

    整体加密逻辑是,首先生成16位key值 用SM2 公钥加密该key值,后端用sm2私钥 解密出key值,然后采用sm4方法根据key值对返回值进行加密,前端采用sm4 对后端返回结果进行解密进行前端展示 目前主要常用的国密算法有sm-crypto,gm-crypto,gm-crypt(SM4) 1、安装 sm-crypto 2、包装加解密

    2024年02月12日
    浏览(46)
  • JAVA集成国密SM4

    国密算法概述:https://blog.csdn.net/qq_38254635/article/details/131801527 SM4对称算法 SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位 ConfigBean.java ProviderSingleton.java SecretCommon.java Utils.java 测试类:Test.java 使用方法参考测试类即可。 使用KeyGenerator构建的秘钥长

    2024年02月10日
    浏览(38)
  • 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)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包