当前位置: 首页 > 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

http://www.lryc.cn/news/382857.html

相关文章:

  • 深入Scala的变量声明与类型推断:语法糖下的智能推导
  • ATA-4052C高压功率放大器在新能源汽车安全测试中的应用
  • liunx打开谷歌报错
  • ICMAN液位检测大盘点
  • 2024软件设计师笔记之考点版(一考就过):1-10
  • Java中的性能优化技巧
  • 一位Java软件开发工程师繁忙的一天
  • 容易上手的AI图片生成软件有哪些值得推荐?
  • 如何高效运营交友APP
  • 使用@Lazy注解解决循环依赖的问题
  • manim边学边做--SingleStringMathTex
  • 4、双足机器人mpc基础概念
  • 论坛实现随机发帖的学习
  • 麒麟系统设置jar开机自启动自定义服务
  • WebPages 全局
  • 19 Shell编程之条件语句
  • 生产看板管理系统内容有哪些?
  • 玩转数据库索引
  • 公共云遣返的经济性
  • 夏季河湖防溺水新举措:EasyCVR+AI视频智能监控系统保障水域安全
  • 2024年最新【交安】公路水运安全员备考题库。
  • Excel 宏录制与VBA编程 —— 16、InputBox函数的使用方式
  • 【ai】tx2 nx : yolov4加入initLibNvInferPlugins构建
  • 【Proteus仿真】【Arduino单片机】基于物联网新能源电动车检测系统设计
  • MobaXterm破解专业版方法
  • 0基础学JMeter:如何开始简单的WEB压力测试(一)
  • ArcGIS数据处理与制图
  • 基于Java微信小程序校园订餐系统设计和实现(源码+LW+调试文档+讲解等)
  • 基于文件的本地数据库组件 DuckDB, ChDB, SQLite, LevelDB, RocksDB
  • 日志记录功能