当前位置: 首页 > news >正文

基于hutool的sm2非对称加密使用示例

前言

现在在网上已经有很多同学对hutool的sm2使用进行了详细的介绍。但是在使用过程中不是很符合我个人的使用情况。我在这儿自己整理了一版,一方面希望能对有需要的同学有些许帮助,另一方面做个笔记,方便后期直接cv。

引入依赖

        <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency><!--基于个人的jdk版本而定。我的jdk是17 所以采用jdk15on--><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.70</version></dependency>

bcprov-jdk15on具体版本参考maven中央仓库

具体代码实现过程


import cn.hutool.core.codec.Base64;
import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.core.util.HexUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.PublicKey;public class SM2Util {// 初始化sm2对象private static SM2 sm2 = getSM2();/*** 生成密钥; 测试使用,实际使用中请保存到文件中,或者数据库中*/public static void generateKey() {KeyPair pair = SecureUtil.generateKeyPair("SM2");PrivateKey privateKey = pair.getPrivate();PublicKey publicKey = pair.getPublic();System.out.println("private:"+Base64.encode(privateKey.getEncoded()));System.out.println("public:"+Base64.encode(publicKey.getEncoded()));}/*** 验证签名* @param content 需要被验证的内容* @param sign 签名* @return true:验证通过,false:验证失败*/public static boolean verify(String content,String sign){return sm2.verifyHex(HexUtil.encodeHexStr(content), sign);}/*** 加密字符串* @param content 需要签名的内容* @return 加密后的密文 base64编码*/public static String encryptBase64(String content){return sm2.encryptBase64(content,KeyType.PublicKey);}/*** 对密文进行解密* @param data 密文* @return*/public static String decrypt(String data){return sm2.decryptStr(data, KeyType.PrivateKey);}/*** 签名* @param content 需要签名的内容* @return 签名字符串 结果固定为142位*/public static String sign(String content){return sm2.signHex(HexUtil.encodeHexStr(content));}public static SM2 getSM2(){// 在resource目录下存放 私钥和公钥。私钥和公钥生成的办法参考generateKey()String privateKey = ResourceUtil.readUtf8Str("sm2_private.key");String publicKey = ResourceUtil.readUtf8Str("sm2_public.key");return new SM2(privateKey, publicKey);}public static void main(String[] args) {String content = "张三里斯忘我ss  **()((##";String encryptBase64 = encryptBase64(content);System.out.println("加密结果:"+encryptBase64);String decrypt = decrypt(encryptBase64);System.out.println("解密结果:"+decrypt);String sign = sign(content);System.out.println("签名结果:"+sign);boolean verify = verify(content, sign);System.out.println("正向验证结果:"+verify);boolean verify1 = verify("djaoidf", sign);System.out.println("反向验证结果:"+verify1);}
}

总结

以上就是全部功能。如有疑问可在评论区联系我。参考: hutool 非对称加密SM2

相关文章:

基于hutool的sm2非对称加密使用示例

前言 现在在网上已经有很多同学对hutool的sm2使用进行了详细的介绍。但是在使用过程中不是很符合我个人的使用情况。我在这儿自己整理了一版&#xff0c;一方面希望能对有需要的同学有些许帮助&#xff0c;另一方面做个笔记&#xff0c;方便后期直接cv。 引入依赖 <dependen…...

深入Scala的变量声明与类型推断:语法糖下的智能推导

Scala是一种静态类型语言&#xff0c;以其强大的类型推断系统而闻名。变量声明和类型推断是Scala编程中的基础概念&#xff0c;它们共同简化了代码的编写并提高了开发效率。本文将深入探讨Scala中变量声明的语法规则和类型推断的工作原理。 1. Scala静态类型的优越性 静态类型…...

ATA-4052C高压功率放大器在新能源汽车安全测试中的应用

新能源汽车的崛起已经改变了汽车行业的格局&#xff0c;为环境友好型交通方式提供了更多的选择。为了确保这些新型汽车的安全性和可靠性&#xff0c;进行全面的安全测试是至关重要的。高压功率放大器在新能源汽车的安全测试中发挥着重要的作用&#xff0c;本文将介绍其应用以及…...

liunx打开谷歌报错

liunx打开谷歌报错[48526:48526:0624/173553.311113:ERROR:zygote_host_impl_linux.cc(99)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180. 这个错误信息表明你尝试以root用户身份运行Chrome浏览器&#xff0c;但是没有使用–no-san…...

ICMAN液位检测大盘点

ICMAN液位检测原理&#xff1a; 基于双通道比较原理&#xff0c;一个通道检测当前无水状态下的环境电容&#xff0c;另一个通道通过传感电极去检测容器内液体的变化情况&#xff0c;通过两个通道电容的差值与芯片内部设定阈值做比较&#xff0c;来判断容器壁内部液位的变化或者…...

2024软件设计师笔记之考点版(一考就过):1-10

软件设计师之一考就过:成绩版 考点1:CPU、指令 真题1:CPU 执行算术运算或逻辑运算时,常将源操作数和结果暂存在(累加器(AC))中。 真题2:在程序的执行过程中,Cache与主存的地址映射是由(硬件自动)完成的。 真题3:计算机执行程序时,内存分为静态数据区、代码区、…...

Java中的性能优化技巧

Java中的性能优化技巧 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在Java开发中&#xff0c;性能优化是一项重要且经常需要面对的任务。尽管Java提供了许多…...

一位Java软件开发工程师繁忙的一天

早晨&#xff1a;迎接新的一天 7:00 AM - 起床 每天早晨七点准时起床。洗漱、早餐后&#xff0c;他查看手机上的邮件和待办事项&#xff0c;以便提前了解今天的工作内容。 8:00 AM - 前往公司 乘坐公交车前往公司。路上&#xff0c;他通过手机阅读一些技术博客或参加在线技术…...

容易上手的AI图片生成软件有哪些值得推荐?

随着人工智能技术的飞速发展&#xff0c;我们的生活也正在经历一场前所未有的变革。其中&#xff0c;AI图片生成软件的出现&#xff0c;为我们的创作提供了更多的可能性。那么接下来就来介绍几款容易上手、功能强大的AI图片生成软件。 首先是建e网AI&#xff0c;这是一个专为设…...

如何高效运营交友APP

如何高效运营交友APP?在当今的互联网时代&#xff0c;交友App已成为连接人与人之间情感纽带的桥梁。然而&#xff0c;面对激烈的市场竞争和不断变化的用户需求&#xff0c;如何高效运营一款交友App&#xff0c;确保用户黏性并提升安全体验&#xff0c;成为每个运营者关注的焦点…...

使用@Lazy注解解决循环依赖的问题

有这样一个场景&#xff1a; 订单服务与用户服务的循环依赖 假设在一个电商系统中&#xff0c;我们有两个服务类&#xff1a;OrderService 和 UserService。 OrderService 需要访问用户服务来获取或更新订单关联的用户信息。例如&#xff0c;当处理订单时&#xff0c;可能需要…...

manim边学边做--SingleStringMathTex

SingleStringMathTex是Mobjects分类中用来显示数学公式的class。 manim中有3个可以用来显示数学公式的class&#xff0c;还有两个是MathTex和Tex&#xff0c;后续再介绍。 从SingleStringMathTex的名称中也可以看出&#xff0c;它是用来显示只有一行的简单公式。 SingleStrin…...

4、双足机器人mpc基础概念

MPC全称是Model Predictive Control,即模型预测控制。主要思想是通过建立机器人动态模型,在运动过程中通过控制输入,来预测机器人未来的运动轨迹和状态。此处的机器人特指双足机器人。 坐标系1、W(orld)系:固定于地面上某点,用于定义机器人绝对位置的是世界坐标系。此处x=…...

论坛实现随机发帖的学习

1、badboy操作&#xff0c;录制发帖全过程&#xff0c;录制结果保存&#xff0c;生成为.jmx格式的文件 2、在Jmeter中打开该.jmx文件&#xff0c;重命名&#xff0c;便于了解步骤 3、生成结果树&#xff0c;查看所以步骤是否正确 4、实现随机发帖 断言&#xff1a;具有唯一表…...

麒麟系统设置jar开机自启动自定义服务

项目场景&#xff1a; 在信创项目中&#xff0c;麒麟操作系统(兆芯)客户端访问web端程序时&#xff0c;PC机器上需要安装读卡器读卡服务&#xff08;自定义服务&#xff09;才能读取身份证/卡片信息&#xff0c;并开机自启动。 解决方案&#xff1a; /usr/local/custom-server目…...

WebPages 全局

WebPages 全局 概述 WebPages 全局是一个综合性的概念&#xff0c;涉及网站设计、开发、优化和管理的各个方面。在当今数字化时代&#xff0c;拥有一个功能齐全、用户友好的网站对于个人和企业来说至关重要。本文将深入探讨 WebPages 全局的相关主题&#xff0c;包括网站设计…...

19 Shell编程之条件语句

目录 19.1 条件测试操作 19.1.1 文件测试 19.1.1 整数值比较 19.1.3 字符串比较 19.1.4 逻辑测试 19.2 if条件语句 19.2.1 if语句的结构 19.2.2 if语句应用示例 19.3 case分支语句 19.3.1 case语句的结构 19.3.2 case语句应用示例 19.1 条件测试操作 Shell环境根据命令执行后…...

生产看板管理系统内容有哪些?

相信很多做生产管理的朋友都会遇到如下问题&#xff0c;我就在想&#xff0c;是否能一个创建“透明的”的工作场所&#xff1f;让员工和管理者能够实时查询生产进度&#xff0c;及时发现生产中的问题。 生产进度难追踪 生产过程不透明 生产决策缺乏数据支持 ——能&#xf…...

玩转数据库索引

1、概述 通常我们要对数据库进行优化&#xff0c;主要可以通过以下五种方法。 计算机硬件调优应用程序调优数据库索引优化SQL语句优化事务处理调优 本篇文章将向大家介绍数据库中索引类型和使用场合&#xff0c;本文以SQL Server为例&#xff0c;对于其他技术平台的朋友也是有…...

公共云遣返的经济性

在过去的几年里&#xff0c;显而易见的是&#xff0c;尽管公有云具有所有优势&#xff0c;但它并不能大规模地节省成本。它在一定程度上提高了生产力&#xff0c;但不会降低您的成本。公有云的好处在于&#xff0c;它提供了一个非常强大的价值主张&#xff0c;即基础设施可以立…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...