java实现国密SM4加密「建议收藏」

java实现国密SM4加密「建议收藏」前言最近世界政治影响,我国也开始要求算法的使用,以避免来自外国的黑客入侵。我们在使用加密算法时,有必要选择使用国密算法进行加密一、国密SM4是什么? 国密即国家密码局认定的国产密码算法。 主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。 SM1为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。 SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA ECC2.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用


前言

在这里插入图片描述

最近世界政治影响,我国也开始要求算法的使用,以避免来自外国的黑客入侵。我们在使用加密算法时,有必要选择使用国密算法进行加密


一、国密SM4是什么?

	国密即国家密码局认定的国产密码算法。
	
	主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。
	SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。
	
	SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA
	ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。
	
	SM3 消息摘要。可以用MD5作为对比理解。该算法已公开。校验结果为256位。
	
	SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。

二、使用步骤

1.引入hutool依赖

Hutool借助Bouncy Castle库可以支持国密算法

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.4.5</version>
</dependency>
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.58</version>
</dependency>

2.示例代码

2.1 使用秘钥

import cn.hutool.crypto.symmetric.SymmetricCrypto;

public class sm4Demo { 
   

    //key必须是16字节,即128位
    final static String key = "sm4demo123456789";

    //指明加密算法和秘钥
    static SymmetricCrypto sm4 = new SymmetricCrypto("SM4/ECB/PKCS5Padding", key.getBytes());

    //加密为16进制,也可以加密成base64/字节数组
    public static String encryptSm4(String plaintext) { 
   
        return sm4.encryptHex(plaintext);
    }

    //解密
    public static String decryptSm4(String ciphertext) { 
   
        return sm4.decryptStr(ciphertext);
    }

    public static void main(String[] args) { 
   
        String content = "hello sm4";
        String plain = encryptSm4(content);
        String cipher = decryptSm4(plain);
        System.out.println(plain + "\n" + cipher);
    }
}

2.2 不使用秘钥

构造SymmetricCrypto 对象时,不传秘钥即可。

SymmetricCrypto sm4 = new SymmetricCrypto("SM4/ECB/PKCS5Padding");

2.3 使用SmUtil快速创建SymmetricCrypto对象

//不带秘钥
SymmetricCrypto sm4 = SmUtil.sm4();

//带秘钥
String key = "1234567812345678";
SymmetricCrypto sm4 = SmUtil.sm4(key.getBytes());

三、API介绍

3.1 加密方法

SymmetricCrypto 类方法 返回类型
encrypt (byte[] data) byte[]
encrypt (String data,Charset charset) byte[]
encryptBase64(byte[] data) String
encrypt(Inputstream data) byte[]
encrypt (String data) byte[]
encrypt (String data,String charset) byte[]
encryptBase64(String data) String
encryptBase64(InputStream data) String
encryptBase64(String data,String charset) String
encryptBase64(String data,Charset charset) String
encryptHex (byte[] data) String
encryptHex (String data) String
encryptHex (Inputstream data) String
encryptHex(String data,string charset) String
encryptHex (String data,Charset charset) String

3.2 解密方法

SymmetricCrypto 类方法 返回类型
decryptstr (String data) String
decryptstr (byte[] bytes,Charset charset) String
decrypt (byte[] bytes)) byte[]
decrypt (String data) byte[]
decryptstr (byte[] bytes) String
decrypt (InputStream data) byte[]
decryptStr (InputStream data) String
decryptstr (String data,Charset charset) String
decryptstr (String data,Charset charset) String

总结

SymmetricCrypto类的构造方法非常灵活,可以灵活根据自己需要的方式进行构造

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/185668.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月5日 下午2:46
下一篇 2022年10月5日 下午3:00


相关推荐

  • KONGA配置

    KONGA配置安装 KONGA 安装 nodejs 和 git 安装 kong 的文档中已经安装了 版本 gt 8 git 运行 Centos 安装 gityuminstal yyuminstall ygit 需要注意版本 gitversion 版本太低的话需要重新下载 否则 gitclone 时会报错 git 解压编译安装 cdgit 2 0 0makeconf

    2026年3月19日
    1
  • 技术纯小白零基础用Win系统搭建Claude Code教程

    技术纯小白零基础用Win系统搭建Claude Code教程

    2026年3月16日
    2
  • pc软件开发用什么语言_java web应用开发

    pc软件开发用什么语言_java web应用开发Windows10SDK预览版需要10030以上版本号的Win10预览版系统才能使用。之前我安装的9926的系统,然后安装VS2015CTP6,再装Win10SDK,但是在新建项目后,

    2022年8月5日
    8
  • 关于计算机病毒的试题,计算机病毒测试题.doc

    关于计算机病毒的试题,计算机病毒测试题.doc计算机病毒1.下列叙述中,正确的一条是______。A、Word文档不会带计算机病毒B、计算机病毒具有自我复制的能力,能迅速扩散到其他程序上C、清除计算机病毒的最简单的办法是删除所有感染了病毒的文件D、计算机杀病毒软件可以查出和清除任何已知或未知的病毒2.下列关于计算机病毒知识的叙述中,正确的一条是______。A、反病毒软件可以查、杀任何种类的病毒B、计算机病毒是一种被破坏了的程序C、…

    2022年6月2日
    36
  • 计算机信息计量单位kgm,工程单位换算表.pdf

    计算机信息计量单位kgm,工程单位换算表.pdf工程单位换算表流量计|论文|工程单位换算表流量计:蒸汽流量计|污水流量计|明渠式流量计|电磁流量计|靶式流量计|涡街|涡轮|流量积算仪产品信息样本下载调查问卷论坛留言关于我们产品价格招聘买马技术资料…

    2022年5月14日
    81
  • pychram 激活码-激活码分享

    (pychram 激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月27日
    50

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号