【Java加解密系列】- SM4加解密

这篇具有很好参考价值的文章主要介绍了【Java加解密系列】- SM4加解密。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

之前文章介绍过SM2生成密钥和加解密的代码实现过程,这篇文章主要介绍下SM4对称加密算法的代码实现,依然还是引用的BC库。代码实现比较简单,直接上代码:

public final class Sm4Utils {

    private static final Logger LOGGER = LoggerFactory.getLogger(Sm4Utils.class);

    private static final String ALGORITHM_NAME_ECB_PADDING = "SM4/ECB/PKCS5Padding";

    private static volatile boolean initResult;

    private static Object lock = new Object();

    private static void init() {
        if (!initResult) {
            synchronized (lock) {
                if (!initResult) {
                    try {
                        Security.addProvider(new BouncyCastleProvider());
                        initResult = true;
                    } catch (Exception e) {
                        LOGGER.error("init failed:{}", e.getMessage(), e);
                    }
                }
            }
        }
    }

    /**
     * 加密
     * @param data 数据
     * @param key  秘钥
     * @return 密文
     */
    public static byte[] encrypt(byte[] data, byte[] key) throws Exception {
        init();
        SecretKey secretKey = new SecretKeySpec(key, "SM4");
        Cipher cipher = Cipher.getInstance(ALGORITHM_NAME_ECB_PADDING, BouncyCastleProvider.PROVIDER_NAME);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encryptedBytes = cipher.doFinal(data);
        return encryptedBytes;
    }

    /**
     * 解密
     * @param data 数据
     * @param key  秘钥
     * @return 明文
     */
    public static byte[] decrypt(byte[] data, byte[] key) throws Exception {
        init();
        SecretKey secretKey = new SecretKeySpec(key, "SM4");
        Cipher cipher = Cipher.getInstance(ALGORITHM_NAME_ECB_PADDING, BouncyCastleProvider.PROVIDER_NAME);
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decryptedBytes = cipher.doFinal(data);
        return decryptedBytes;
    }
}

跑个测试用例试一下:

public static void main(String args[]) throws Exception {
        String key = "abcdefghigklmnop";
        String data = "lenovo";
        String ciphertext = Base64.encodeBase64String(Sm4Utils.encrypt(data.getBytes("UTF-8"), key.getBytes("UTF-8")));
        System.out.println("ciphertext:" + ciphertext);
        String plaintext = new String(Sm4Utils.decrypt(Base64.decodeBase64(ciphertext), key.getBytes("UTF-8")), "UTF-8");
        System.out.println("plaintext:" + plaintext);
    }

输出结果如下:文章来源地址https://www.toymoban.com/news/detail-742648.html

ciphertext:iqGwAR5ZHRPoPO78RmK6AQ==
plaintext:lenovo

到了这里,关于【Java加解密系列】- SM4加解密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • js sm4实现加密解密

    2023.10.25今天我学习了如何使用sm4进行加密解密: 注意:前端和后端的编码必须相同才能使用,不然会出现空字符串的错误。 一、首先安装sm4.js包: package.json中的版本: (安装失败的话可以直接复制下面的版本然后npm install) 二、main.js中全局引入或局部引入: 这个是全局

    2024年01月18日
    浏览(32)
  • SpringBoot实现国密SM4加密、解密

    SM4.0(原名SMS4.0)是中华人民共和国政府采用的一种分组密码标准,由国家密码管理局于2012年3月21日发布。相关标准为“GM/T 0002-2012《SM4分组密码算法》(原SMS4分组密码算法)”。 在商用密码体系中,SM4主要用于数据加密,其算法公开,分组长度与密钥长度均为128bit,加密算

    2024年02月07日
    浏览(31)
  • 前端使用国密SM4进行加密、解密

    前端/后端使用 国密SM4 进行加密/解密, 【注意】前后端配合加解密时,需要我们 自定义密钥 ,一般由后端提供 下载 sm4util 依赖 sm4util 依赖使用说明 使用 - ECB 模式加解密 后端代码参考:https://blog.csdn.net/qq_48922459/article/details/122130283 这种办法好像只能使用默认密钥 key,不能

    2023年04月23日
    浏览(28)
  • 医保移动支付加密解密请求工具封装【国密SM2SM4】

    医保移动支付加密解密请求工具封装 定点医药机构向地方移动支付中心发起费用明细上传、支付下单、医保退费等交易时需要发送密文,由于各大医疗机构厂商的开发语各不相同,可能要有java的、c#的、python的、pb的、nodjs的、php的、还可能有Delphi的等。。。。很多开发语言

    2024年01月21日
    浏览(50)
  • 保护数据隐私:深入探索Golang中的SM4加密解密算法

    最近做的项目对安全性要求比较高,特别强调: 系统不能涉及MD5、SHA1、RSA1024、DES高风险算法。 那用什么嘞?甲方: 建议用国产密码算法SM4。 擅长敏捷开发(CV大法)的我,先去GitHub找了开源项目、又去网络上找了一些教程,但是或多或少都有些问题: 比如 golang.org/x/cryp

    2024年02月10日
    浏览(54)
  • C# 实现 国密SM4/ECB/PKCS7Padding对称加密解密

    C# 实现 国密SM4/ECB/PKCS7Padding对称加密解密,为了演示方便本问使用的是Visual Studio 2022 来构建代码的 1、新建项目,之后选择 项目 鼠标右键选择  管理NuGet程序包管理,输入  BouncyCastle 回车 添加BouncyCastle程序包 2、代码如下:CBC模式 代码如下:ECB模式 3、运行 4、SM4密码算法

    2024年02月11日
    浏览(31)
  • 【Java加解密系列】- SM4加解密

    之前文章介绍过SM2生成密钥和加解密的代码实现过程,这篇文章主要介绍下SM4对称加密算法的代码实现,依然还是引用的BC库。代码实现比较简单,直接上代码: 跑个测试用例试一下: 输出结果如下:

    2024年02月05日
    浏览(32)
  • Java之SM4解密与解密

    在线加密工具链接  在线SM4国密加密/解密—LZL在线工具 在线SM4国密加密/解密 https://lzltool.cn/SM4 根据项目选择相应数据格式  pom.xml引入一下jar包 实现SM4加密和解密代码部分

    2024年02月06日
    浏览(24)
  • JAVA -SM4 ECB加密

    前言:根据网络安全法要求,现在对数据存储、口令安全要求越来越严格,对技术人员编码规范要求愈加严苛,推出国密算法等政策要求 sm4-ecm举例说明 第一步引入包提示错误 第二步:pom.xml依赖如下 说明如下: BouncyCastle是一个开源的第三方算法提供商。 BouncyCastle提供了很多

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

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

    2024年02月11日
    浏览(23)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包