JDK1.5 java代码打包jar HmacSha256

文章目录

  • demo地址
  • 背景
  • 实现
    • 编写代码
    • 编译class文件
    • 打包 JAR 文件
    • 执行生成的 JAR 文件
    • 辅助验证方式
  • 常见问题和解决方法
  • 常规生成jar方案
    • maven插件
    • idea工具

demo地址

https://github.com/xiangge-zx/HmacSha256

背景

最近接到一个需求,做一个可以用来HmacSha256加密的小工具,感觉可以很轻松搞出来,没想到一个前置要求是要使用jdk1.5版本,遇到了不少问题,记录一下最终的解决方案。
在这里插入图片描述

实现

编写代码

  • 代码
package com.xuan.it;import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;public class HmacSha256 {public static String hmacSHA256(String data, String secret) {try {// Create HMAC-SHA256 key from the given secretSecretKeySpec secretKeySpec = new SecretKeySpec(secret.getBytes(), "HmacSHA256");// Get an instance of Mac object implementing HMAC-SHA256Mac mac = Mac.getInstance("HmacSHA256");mac.init(secretKeySpec);// Calculate the HMAC valuebyte[] hmacBytes = mac.doFinal(data.getBytes());// Convert result into a hexadecimal stringStringBuilder sb = new StringBuilder(hmacBytes.length * 2);for (byte b : hmacBytes) {sb.append(String.format("%02x", b));}return sb.toString();} catch (NoSuchAlgorithmException | InvalidKeyException e) {throw new RuntimeException("Failed to calculate HMAC-SHA256", e);}}public static void main(String[] args) {if (args.length != 2) {System.out.println("Please provide two integers as arguments.");return;}try {String message = args[0];
//            String message = "0";String secret = args[1];
//            String secret = "1";String hmacSha256Hex = hmacSHA256(message, secret);System.out.println(hmacSha256Hex);} catch (NumberFormatException e) {System.out.println("The arguments must be integers.");}}}

编译class文件

进到 \HmacSha256-jdk5\src> 目录
先检查java命令版本 确认配置的是java 1.5

HmacSha256-jdk5\src> java -version
java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-b64)
Java HotSpot(TM) Client VM (build 1.5.0-b64, mixed mode, sharing)HmacSha256\HmacSha256-jdk5\src> javac .\HmacSha256.java

打包 JAR 文件

  • 在 JDK 1.5 中,运行以下 jar 命令将文件打包成 JAR 文件,还是在进到class文件所在的目录,编译后的 .class 文件为 HmacSha256.class
    jar cvf HmacSha256-jdk5.jar .\HmacSha256.class
    

在上述命令中,cvfjar 命令的参数,用于指定不同的操作和选项。以下是每个参数的含义:

  • c:表示创建新的 JAR 文件。
  • v:表示在标准输出中生成详细输出,即显示创建 JAR 文件的详细过程。
  • f:表示指定 JAR 文件的名称。在这种情况下,HmacSha256-jdk5.jar 是要创建的 JAR 文件的名称。

执行生成的 JAR 文件

如果你想直接调用 HmacSha256 类中的 main 方法,你可以通过反射来实现。在你的 shell 脚本中,你可以使用以下命令来执行该操作:

java -cp HmacSha256-jdk5.jar HmacSha256 0 1

在这个命令中:

  • -cp HmacSha256-1.0.jar 指定了类路径,告诉 Java 虚拟机在哪里找到 HmacSha256 类。
  • HmacSha256 是你要执行的类名。
  • 后面的参数 0 1会作为main方法的参数传递给HmacSha256` 类。

比对结果和预期一致 https://www.jyshare.com/crypto/hmacsha256/
在这里插入图片描述

辅助验证方式

windows脚本验证jar中的class版本

javap -verbose -classpath .\HmacSha256-jdk6.jar HmacSha256

在这里插入图片描述

常见问题和解决方法

  • 找不到或无法加载主类:这通常是由于 MANIFEST.MF 文件中指定的主类信息有误导致的。确保 MANIFEST.MF 文件中指定的主类路径和名称是正确的,或者通过-cp参数指定类路径
  • 缺少依赖:如果 JAR 文件依赖于其他库或 JAR 文件,确保这些依赖文件也在类路径中,确保这些库的版本与您的应用程序兼容
  • 权限问题:在某些系统上可能需要管理员权限才能执行 JAR 文件,您可以尝试以管理员身份运行命令行。
  • Java 版本:确保您使用的 Java 运行时环境版本与编译 JAR 文件时使用的 Java 版本兼容。有时候,使用较新版本的 Java 编译的 JAR 文件可能无法在较旧版本的 Java 运行时环境中正常运行。这也是这篇文章出现的原因,目标环境只能执行jdk1.5版本的代码

常规生成jar方案

maven插件

maven插件还是目前最常用的方式,这里简单写了一个demo在仓库中
https://github.com/xiangge-zx/HmacSha256
在这里插入图片描述

idea工具

基于idea的打包方式也是很常用的方法,这个方式最低需要1.6版本的jdk
在这里插入图片描述

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

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

相关文章

Go八股(Ⅳ)***slice,string,defer***

***slice,string,defer*** 1.slice和arry的区别 arry: Go语言中arry即为数据的一种集合,需要在声明时指定容量和初值,且一旦声明就长度固定,访问时按照索引访问。通过内置函数len可以获取数组中的元素个…

Win系统通过命令行查看笔记本电池损耗/寿命/健康

在 Windows 10/11 系统中,可以通过指令查看笔记本电池的寿命情况,方法如下: 0,打开cmd/终端 键盘快捷键:Win R,然后输入cmd,点击【确定】 1,执行命令 在命令行中输入下面指令并按…

103 - Lecture 1

Introduction to Database 一、Introduction to Database Systems 1. 数据的定义 What is Data? EX: data could be a docx file storing your project status report; data could be a spreadsheet containing information • 数据只有在设计的场景中才有意义。&#xff…

【大数据学习 | kafka高级部分】kafka中的选举机制

controller的选举 首先第一个选举就是借助于zookeeper的controller的选举 第一个就是controller的选举,这个选举是借助于zookeeper的独享锁实现的,先启动的broker会在zookeeper的/contoller节点上面增加一个broker信息,谁创建成功了谁就是主…

关于几种卷积

1*1卷积 分组卷积&深度可分离卷积 空洞卷积、膨胀卷积 转置卷积 https://zhuanlan.zhihu.com/p/80041030 https://yinguobing.com/separable-convolution/#fn2 11的卷积可以理解为对通道进行加权,对于一个通道来说,每个像素点加权是一样的&am…

OCR、语音识别与信息抽取:免费开源的AI平台在医疗领域的创新应用

一、系统概述 在医疗行业中,大量数据来自手写病历、医学影像报告、患者对话记录等非结构化数据源。这些数据常常存在信息碎片化和管理困难的问题,给医务人员的工作带来了不便。思通数科AI多模态能力平台正是为了解决这一行业痛点而生,产品集…

Git进阶(十八):git rebase详解

文章目录 一、前言二、rebase 图解三、应用示例四、重建提交历史五、rebase VS merge六、拓展阅读 一、前言 rebase 使用方法 git rebase [基节点] git rebase [基节点] [待变基节点]rebase后面的参数可以是两个,也可以是一个,当rebase为一个参数的时…

【React】条件渲染——逻辑与运算符

条件渲染——逻辑与&&运算符 你会遇到的另一个常见的快捷表达式是 JavaScript 逻辑与(&&)运算符。在 React 组件里,通常用在当条件成立时,你想渲染一些 JSX,或者不做任何渲染。 function Item({ nam…

《深度学习》——深度学习基础知识(全连接神经网络)

文章目录 1.神经网络简介2.什么是神经网络3.神经元是如何工作的3.1激活函数3.2参数的初始化3.2.1随机初始化3.2.2标准初始化3.2.3Xavier初始化(tf.keras中默认使用的)3.2.4He初始化 4.神经网络的搭建4.1通过Sequential构建神经网络4.2通过Functional API…

Bsin-kb-agent:企业级AI知识库

企业级AI知识库 Bsin-kb-agent 是基于BsinPaaS开源框架和大语言模型构建的企业知识库应用,借鉴langchain的框架思想,引入langchian4j组件,微前端微服务的架构设计,可快速助您构建和体验端到端的AI知识库应用。 应用场景 企业微…

每日OJ题_牛客_春游_贪心+数学_C++_Java

目录 牛客_春游_贪心数学 题目解析 C代码 Java代码 牛客_春游_贪心数学 春游 描述: 盼望着,盼望着,东风来了,春天脚步近了。 值此大好春光,老师组织了同学们出去划船,划船项目收费如下:…

容器化技术入门:Docker详解

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 容器化技术入门:Docker详解 容器化技术入门:Docker详解 容器化技术入门:Docker详解 引言 Doc…

数据挖掘实战-基于SARIMA时间序列模型预测Netflix股票未来趋势

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

Java:多态的调用

1.什么是多态 允许不同类的对象对同一消息做不同的响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)。多态使用了一种动态绑定(dynamic binding)技术,指在执行期间判断所引用…

HbuildderX运行到手机或模拟器的Android App基座识别不到设备 mac

寻找模拟器 背景: 运行的是h5,模拟器是网易MuMu。 首先检查一下是否配置dab环境,adb version 配置一下hbuilderX的adb: 将命令输出的路径配置到hbuilderx里面去,然后重启下HbuilderX。 开始安装基座…一直安装不…

小程序 CRM 运营系统:提升用户体验的新利器

在当今数字化时代,小程序以其便捷、高效的特点迅速成为企业与用户互动的重要平台。而将客户关系管理(CRM)运营系统融入小程序中,更是为企业带来了全新的机遇与挑战。那么,如何构建一个成功的小程序CRM运营系统呢&#…

【362】基于springboot的在线租房和招聘平台

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统在线租房和招聘平台信息管理难度大,容错率低&…

华为Mate70前瞻,鸿蒙NEXT正式版蓄势待发,国产系统迎来关键一战

Mate 70系列要来了 上个月,vivo、小米、OPPO、荣耀等众多智能手机制造商纷纷发布了他们的年度旗舰产品,手机行业内竞争异常激烈。 同时,华为首席执行官余承东在其个人微博上透露,Mate 70系列将标志着华为Mate系列手机达到前所未有…

【Java Web】JSP实现数据传递和保存(中)中文乱码 转发与重定向

文章目录 中文乱码转发与重定向转发重定向区别 升级示例1 中文乱码 JSP 中默认使用的字符编码方式:iso-8859-1,不支持中文。常见的支持中文的编码方式及其收录的字符: gb2312:常用简体汉字gbk:简体和繁体汉字utf-8&a…

Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized

这里是Themberfue 在上一节的最后,我们讨论两个线程同时对一个变量累加所产生的现象 在这一节中,我们将更加详细地解释这个现象背后发生的原因以及该如何解决这样类似的现象 线程安全问题 public class Demo15 {private static int count 0;public …