基于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使用进行了详细的介绍。但是在使用过程中不是很符合我个人的使用情况。我在这儿自己整理了一版,一方面希望能对有需要的同学有些许帮助,另一方面做个笔记,方便后期直接cv。 引入依赖 <dependen…...
深入Scala的变量声明与类型推断:语法糖下的智能推导
Scala是一种静态类型语言,以其强大的类型推断系统而闻名。变量声明和类型推断是Scala编程中的基础概念,它们共同简化了代码的编写并提高了开发效率。本文将深入探讨Scala中变量声明的语法规则和类型推断的工作原理。 1. Scala静态类型的优越性 静态类型…...
ATA-4052C高压功率放大器在新能源汽车安全测试中的应用
新能源汽车的崛起已经改变了汽车行业的格局,为环境友好型交通方式提供了更多的选择。为了确保这些新型汽车的安全性和可靠性,进行全面的安全测试是至关重要的。高压功率放大器在新能源汽车的安全测试中发挥着重要的作用,本文将介绍其应用以及…...
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浏览器,但是没有使用–no-san…...
ICMAN液位检测大盘点
ICMAN液位检测原理: 基于双通道比较原理,一个通道检测当前无水状态下的环境电容,另一个通道通过传感电极去检测容器内液体的变化情况,通过两个通道电容的差值与芯片内部设定阈值做比较,来判断容器壁内部液位的变化或者…...
2024软件设计师笔记之考点版(一考就过):1-10
软件设计师之一考就过:成绩版 考点1:CPU、指令 真题1:CPU 执行算术运算或逻辑运算时,常将源操作数和结果暂存在(累加器(AC))中。 真题2:在程序的执行过程中,Cache与主存的地址映射是由(硬件自动)完成的。 真题3:计算机执行程序时,内存分为静态数据区、代码区、…...
Java中的性能优化技巧
Java中的性能优化技巧 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在Java开发中,性能优化是一项重要且经常需要面对的任务。尽管Java提供了许多…...
一位Java软件开发工程师繁忙的一天
早晨:迎接新的一天 7:00 AM - 起床 每天早晨七点准时起床。洗漱、早餐后,他查看手机上的邮件和待办事项,以便提前了解今天的工作内容。 8:00 AM - 前往公司 乘坐公交车前往公司。路上,他通过手机阅读一些技术博客或参加在线技术…...
容易上手的AI图片生成软件有哪些值得推荐?
随着人工智能技术的飞速发展,我们的生活也正在经历一场前所未有的变革。其中,AI图片生成软件的出现,为我们的创作提供了更多的可能性。那么接下来就来介绍几款容易上手、功能强大的AI图片生成软件。 首先是建e网AI,这是一个专为设…...
如何高效运营交友APP
如何高效运营交友APP?在当今的互联网时代,交友App已成为连接人与人之间情感纽带的桥梁。然而,面对激烈的市场竞争和不断变化的用户需求,如何高效运营一款交友App,确保用户黏性并提升安全体验,成为每个运营者关注的焦点…...
使用@Lazy注解解决循环依赖的问题
有这样一个场景: 订单服务与用户服务的循环依赖 假设在一个电商系统中,我们有两个服务类:OrderService 和 UserService。 OrderService 需要访问用户服务来获取或更新订单关联的用户信息。例如,当处理订单时,可能需要…...
manim边学边做--SingleStringMathTex
SingleStringMathTex是Mobjects分类中用来显示数学公式的class。 manim中有3个可以用来显示数学公式的class,还有两个是MathTex和Tex,后续再介绍。 从SingleStringMathTex的名称中也可以看出,它是用来显示只有一行的简单公式。 SingleStrin…...
4、双足机器人mpc基础概念
MPC全称是Model Predictive Control,即模型预测控制。主要思想是通过建立机器人动态模型,在运动过程中通过控制输入,来预测机器人未来的运动轨迹和状态。此处的机器人特指双足机器人。 坐标系1、W(orld)系:固定于地面上某点,用于定义机器人绝对位置的是世界坐标系。此处x=…...
论坛实现随机发帖的学习
1、badboy操作,录制发帖全过程,录制结果保存,生成为.jmx格式的文件 2、在Jmeter中打开该.jmx文件,重命名,便于了解步骤 3、生成结果树,查看所以步骤是否正确 4、实现随机发帖 断言:具有唯一表…...
麒麟系统设置jar开机自启动自定义服务
项目场景: 在信创项目中,麒麟操作系统(兆芯)客户端访问web端程序时,PC机器上需要安装读卡器读卡服务(自定义服务)才能读取身份证/卡片信息,并开机自启动。 解决方案: /usr/local/custom-server目…...
WebPages 全局
WebPages 全局 概述 WebPages 全局是一个综合性的概念,涉及网站设计、开发、优化和管理的各个方面。在当今数字化时代,拥有一个功能齐全、用户友好的网站对于个人和企业来说至关重要。本文将深入探讨 WebPages 全局的相关主题,包括网站设计…...
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环境根据命令执行后…...
生产看板管理系统内容有哪些?
相信很多做生产管理的朋友都会遇到如下问题,我就在想,是否能一个创建“透明的”的工作场所?让员工和管理者能够实时查询生产进度,及时发现生产中的问题。 生产进度难追踪 生产过程不透明 生产决策缺乏数据支持 ——能…...
玩转数据库索引
1、概述 通常我们要对数据库进行优化,主要可以通过以下五种方法。 计算机硬件调优应用程序调优数据库索引优化SQL语句优化事务处理调优 本篇文章将向大家介绍数据库中索引类型和使用场合,本文以SQL Server为例,对于其他技术平台的朋友也是有…...
公共云遣返的经济性
在过去的几年里,显而易见的是,尽管公有云具有所有优势,但它并不能大规模地节省成本。它在一定程度上提高了生产力,但不会降低您的成本。公有云的好处在于,它提供了一个非常强大的价值主张,即基础设施可以立…...
抖音下载器:从零开始,轻松获取无水印视频的完整指南
抖音下载器:从零开始,轻松获取无水印视频的完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallb…...
音频驱动面部动画:Audio2Face技术原理与实践指南
音频驱动面部动画:Audio2Face技术原理与实践指南 【免费下载链接】FACEGOOD-Audio2Face http://www.facegood.cc 项目地址: https://gitcode.com/gh_mirrors/fa/FACEGOOD-Audio2Face 在虚拟人技术快速发展的今天,面部动画的自然度成为提升用户体验…...
STM32开发方式对比与HAL库实战指南
1. STM32开发方式概述作为一名嵌入式开发者,我亲历了STM32开发方式的变迁。从早期的寄存器操作到标准库,再到如今主流的HAL库,每种方式都有其独特的优势和适用场景。对于刚接触STM32的新手来说,选择合适的开发方式往往是个令人困惑…...
别再傻傻分不清了!一文搞懂微信支付代金券和商家券的核心区别与适用场景
微信支付代金券VS商家券:技术选型与场景化应用指南 在数字化营销的浪潮中,优惠券作为连接商户与消费者的重要纽带,其技术实现方式直接影响营销效果与用户体验。微信支付提供的代金券与商家券看似功能相似,实则存在架构级差异。本文…...
自适应滤波实战:如何用LMS算法在MATLAB/Simulink中快速搭建一个‘简易版’维纳滤波器?
自适应滤波实战:LMS算法在MATLAB/Simulink中的工程化实现 在信号处理领域,自适应滤波技术因其强大的环境适应能力而备受青睐。想象一下,你正在处理一段被噪声污染的语音信号,或是试图从复杂工业环境中提取有效振动特征——传统固定…...
告别盲打:用GDB和Python-pwntools动态调试分析jarvisoj_level2的栈溢出漏洞
逆向工程实战:用GDB与pwntools解剖jarvisoj_level2栈溢出漏洞 在二进制安全领域,栈溢出漏洞一直是攻防演练中的经典课题。今天我们将以jarvisoj_level2这道CTF题目为蓝本,深入探讨如何通过GDB动态调试与pwntools脚本的完美配合,实…...
汇川小型机 H5U编写程序 设备采用回转hu小型机编写程序不含的硬件配置有ECT的总线
汇川小型机 H5U编写程序 设备采用回转hu小型机编写程序不含的硬件配置有ECT的总线,包括汇川660系列伺服驱动器以及Io模块。 设备程序分段明确采用梯形图编写更加方便,直观,易懂各个伺服轴密切配合,实现收放卷pid调节,以…...
千问3.5-27B多模态入门:图片理解支持mask区域聚焦,如‘只分析左上角区域’
千问3.5-27B多模态入门:图片理解支持mask区域聚焦,如‘只分析左上角区域’ 你是不是遇到过这种情况:给AI看一张复杂的图片,比如一张满是商品的货架,你只想让它分析左上角那个红色包装的零食,但它却把整张图…...
4阶段构建企业级离线文档处理平台:从问题诊断到性能优化全指南
4阶段构建企业级离线文档处理平台:从问题诊断到性能优化全指南 【免费下载链接】WeKnora LLM-powered framework for deep document understanding, semantic retrieval, and context-aware answers using RAG paradigm. 项目地址: https://gitcode.com/GitHub_Tr…...
通过 Langchain 框架实现 ChatGPT 的使用
一. 简介Langchain 框架:LangChain 是一个开源框架,是一个让大语言模型(如ChatGPT)能连接外部工具、记忆对话、执行复杂任务的“智能助手”开发框架,解决了LLM应用开发中的各种工程化问题。# LangChain 的核心定位&…...
