java break 在if 中使用_java中使用国密SM4算法详解

前言

上次总结了一下加密算法的分类(加密算法有集中形式,各有什么不同?),现在我们用java语言实现一下SM4:无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。

ps:我们既可以基于Java 原生实现加密和解密,又可以基于第三方的工具包实现。下面我们首先介绍基于第三方工具包 hutool,如果是项目的话建议直接使用第三方的工具。

一、使用步骤

1.引入库

在项目的pom.xml的dependencies中加入以下内容:

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

说明: bcprov-jdk15to18的版本请前往Maven中央库搜索,查找对应JDK的最新版本。

2.创建maven测试工程

5352753b6001266383c499a8797f18c8.png

3.开始编写对称加密SM4测试方法

package org.xiangbiao;import cn.hutool.core.util.CharsetUtil;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.symmetric.SymmetricCrypto;/***SM4Test* @author larry.xiang**/
public class SM4Test
{public static void main( String[] args ){String content = "fisco bcos";SymmetricCrypto sm4 = SmUtil.sm4();String encryptHex = sm4.encryptHex(content);String decryptStr = sm4.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);System.out.println(encryptHex+"rn"+decryptStr);}
}

4.测试结果

f754b79ef79a90c35ac78e966a62f83f.png

二、如何定制自己的密钥?

如下面的代码所示:

package org.xiangbiao;import cn.hutool.core.util.CharsetUtil;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.symmetric.SymmetricCrypto;/***SM4Test* @author larry.xiang**/
public class SM4Test
{public static void main( String[] args ){String content = "fisco bcos";// key必须是16位String key="1234567890123456";SymmetricCrypto sm4 = SmUtil.sm4(key.getBytes());String encryptHex = sm4.encryptHex(content);String decryptStr = sm4.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);System.out.println(encryptHex+"rn"+decryptStr);}
}

4068e7114caa6bcb8af1be291ca556ca.png

总结

有小伙伴在使用自己自定义的密钥报错如下:

Exception in thread "main" cn.hutool.crypto.CryptoException: InvalidKeyException: SM4 requires a 128 bit keyat cn.hutool.crypto.symmetric.SymmetricCrypto.encrypt(SymmetricCrypto.java:209)at cn.hutool.crypto.symmetric.SymmetricCrypto.encrypt(SymmetricCrypto.java:312)at cn.hutool.crypto.symmetric.SymmetricCrypto.encryptHex(SymmetricCrypto.java:322)at org.xiangbiao.SM4Test.main(SM4Test.java:20)
Caused by: java.security.InvalidKeyException: SM4 requires a 128 bit keyat org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineInit(Unknown Source)at javax.crypto.Cipher.init(Cipher.java:1245)at javax.crypto.Cipher.init(Cipher.java:1185)at cn.hutool.crypto.symmetric.SymmetricCrypto.encrypt(SymmetricCrypto.java:203)... 3 more

注意:128 bit = 128 / 8 = 16 byte

链接:java中使用国密SM4算法详解_ CSDN博客
作者:向彪-fisco bcos

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245127.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动web前端开发框架_移动前端开发是Web前端开发吗?

移动端开发并不是Web前端开发&#xff0c;但移动前端开发和web前端开发其实都属于前端开发的范围&#xff0c;目前前端发展的趋势就是大前端&#xff0c;可以说是包罗万象。但不论趋势如何发展&#xff0c;目前来看HTML、CSS和JavaScript依然是整个前端开发的三大基石。所以不论…

mtk一键usb驱动_三菱MRJEB驱动器报错,导致报错原因37.1参数设置范围异常?

三菱MR-JE-B驱动器报错&#xff0c;导致报错原因37.1参数设置范围异常&#xff1f;最近海蓝机电工程师们在做一个项目&#xff0c;做的是三菱MR-JE-B驱动器。工程师们在实操这个项目过程中遇到各种问题&#xff0c;其中就像驱动器报错的问题&#xff0c;导致报错的原因显示37,1…

mysql 上一条_mysql选择上一条、下一条数据记录

1.表数据结构选择mysql记录上一条&#xff0c;下一条sql语句SELECT * FROM user ORDER BY rank ASC-------------------| ID | rank | name |-------------------| 1 | 1 | admin1 || 2 | 2 | admin2 || 3 | 3 | admin3 || 4 | 4 | admin4 || 5 | 5 | admin5 || 6 | 6 | admin6…

将虚拟主机加入到netskills.net域环境_网站建设阿里云虚拟主机、ECS服务器、企业邮箱选择购买指南...

对于刚接触阿里云的人来说可能看到阿里云的产品介绍页面会比较头晕&#xff0c;各种产品分类&#xff0c;而且同一个产品在不同的分类目录下都能看到&#xff0c;下面简单介绍一下制作网站过程中常用的阿里云的产品。阿里云在网站建设方面常用的服务主要有云虚拟主机、ECS云服务…

lr监控mysql_LR通过SiteScope监控mysql

SiteScope下载&#xff0c;安装要想使用LoadRunner监测MySQL数据库的性能&#xff0c;LoadRunner没有提供直接监测 MySQL的功能&#xff0c;所以&#xff0c;我们需要借助sitescope监控&#xff0c;然后在LoadRunner显示sitescope监测结果&#xff0c;这样间接地监控MySQL性能。…

mysql unique 锁_mysql 行锁排查

mysql 锁表: 隔离级别使用RR: mysql> SELECT GLOBAL.tx_isolation, tx_isolation; ---------------------------------------- | GLOBAL.tx_isolation | tx_isolation | ---------------------------------------- | REPEATABLE-READ | REPEATABLE-READ SESSION A: mysql>…

python中基例_Python python从入门到实践(5) --代码复用

函数、类与代码复用代码复用的思想把代码当成资源进行抽象。代码资源化&#xff1a;程序代码是一种用来表达计算的"资源"代码抽象化&#xff1a;使用函数等方法对代码赋予更高级别的定义代码复用&#xff1a;同一份代码在需要时可以被重复使用函数和对象是代码复用的…

linux查看硬盘smart_Linux检测磁盘坏道工具用什么命令

请关注本头条号&#xff0c;每天坚持更新原创干货技术文章。如需学习视频&#xff0c;请在微信搜索公众号“智传网优”直接开始自助视频学习1. badblock命令简介badblock命令用于查找磁盘中损坏的区块。 电脑硬盘出现坏道后&#xff0c;如果不及时更换或进行技术处理&#xff0…

mysql约束添加删除数据_mysql中约束的添加,修改,与删除

MySQL中的约束,添加约束,删除约束,以及其他的一些修饰&#xff1a;一.NOT NULL(非空约束)添加非空约束1)建表时直接添加CREATE TABLE t_user(user_id INT(10) NOT NULL);2)通过ALTER 语句ALTER TABLE t_user MODIFY user_id INT(10) NOT NULL;ALTER TABLE t_user CHANGE user_i…

c++怎么输入带有空格的字符串_杭电OJ 字符串处理类部分题解

一、前言不知不觉已经大三上学期了&#xff0c;可作为一个计算机狗还没有考过CCF-CSP。因平时学习内容主要与安全方面相关&#xff0c;对于此类算法类的考核并没有太多的准备&#xff0c;故打算开始刷题复习算法和数据结构&#xff0c;准备CCF认证。在这里选择杭电的OJ作为准备…

python弹出框_selenium+python学习——弹出框

1、alert警告框 以百度搜索设置为例&#xff0c;在进行搜索设置后点击“保存设置”按钮&#xff0c;弹出alert对话框&#xff0c;如下图所示&#xff1a;实现代码&#xff1a; from selenium import webdriver import time as t from selenium.webdriver.support.select import…

mysql终端_MySQL之终端(Terminal)管理MySQL

前言&#xff1a;MySQL有很多的可视化管理工具&#xff0c;比如“mysql-workbench”和“sequel-pro-”。 现在我写MySQL的终端命令操作的文章&#xff0c;是想强化一下自己对于MySQL的理解&#xff0c;总会比使用图形化的理解透彻&#xff0c;因为我本来就比较喜欢写代码。同时…

python和node_Python和NodeJS绘图对比

在绘图方面&#xff0c;Python 比 NodeJS 好用&#xff0c;首先 Python 绘图库多&#xff0c;而且 API 强大而完善。 NodeJS 还是少点&#xff0c;一些库还没测就放弃了&#xff0c;需要 window 支持&#xff0c;而我需要在后端执行。 最近一直在搞地面雷达的可视化工作。在研究…

网页打开共享目录_你会做Excel文件目录吗?真的太太太太太简单了!

点击蓝字发送【2020】免费领 100图表模板&#xff01;本文作者&#xff1a;长小安本文编辑&#xff1a;尔冬哈喽大家好&#xff01;我是长小安&#xff0c;一名和秋叶一起学了多年 Excel、现在成功出道投稿的同学~让我来猜猜&#xff0c;你的电脑是不是也像我的一样&#xff0c…

centos7搜狐 mysql_基于centOS6.7搭建LAMP(httpd-2.4.18+mysql-5.5.47+php-5.6.16)环境

首先确保系统可以联网。设置IP地址以及虚拟机安装linux在此略过。本文采用centos6.7 64位minimal版、php5.6.16、httpd-2.4.18、mysql-5.5.47版搭建lamp环境。默认设置软件下载目录/usr/local/src&#xff0c;软件安装目录/app/local/下&#xff0c;安装顺序是apache→mysql→p…

c语言 如何创建adt_编程那些事儿:面向对象编程基石之数据抽象(ADT)

数据抽象本文接上一篇《编程那些事儿&#xff1a;为什么说抽象是面向对象编程的根基【1】&#xff1f;》,在了解了面向对象编程抽象的过程抽象后&#xff0c;下面我们继续聊一下数据抽象。数据抽象可以说面向对象编程最重要的基石。而数据抽象的结果就是数据类型(或简单的类型)…

mysql客户端版本太低_windows一机多装mysql,5.5低版本+5.8高版本

安装第一个mysql&#xff0c;压缩版或者安装版&#xff0c;过程省略&#xff0c;目录如下&#xff1a;运行中输入“regedit”进入后&#xff0c;找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL其实mysql启动的路径一般为&#xff1a;可执行文件的路径&…

java8 list 行转列_Java14 都来了,你还不会用 Java8吗?

Java 8 于2014年3月18日发布&#xff0c;并且成为主流的 Java&#xff0c;如今&#xff0c;虽然 Java 14 都已经发布了&#xff0c;但是 开发者和公司选择的版本依旧是经久不衰的 Java 8 版本&#xff0c;如果你还不了解这些新特性&#xff0c;是时候学习一下了。Java 8 更新的…

mysql主键用完了怎么办_MySQL 自增 ID 用完了怎么办?

MySQL 自增 ID 用完了怎么办&#xff1f;在MySQL中有很多类型的自增ID&#xff0c;每个自增ID都设置了初始值&#xff0c;然后按照一定的步长增加&#xff0c;只要定义了字节长度&#xff0c;那么就会有上限&#xff0c;如果达到上限再次添加&#xff0c;则会报主键冲突错误&am…

python怎么引用多行输入_python调用shell返回两行第二行需要输入密码怎么办?import os os.syst...

没有办法交互&#xff0c;用ftplib吧 # 例&#xff1a;FTP编程 from ftplib import FTP ftp FTP() timeout 30 port 21 ftp.connect(192.168.1.188,port,timeout) # 连接FTP服务器 ftp.login(UserName,888888) # 登录 print ftp.getwelcome() # 获得欢迎信息 ftp.cwd(file/t…