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.rhkb.cn/news/465722.html

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

相关文章

数据结构与算法分析:专题内容——动态规划1之理论讲解(代码详解+万字长文+算法导论+力扣题)

一、前言 The future is independent of the past given the present 未来独立于过去,只基于当下。 马尔可夫链,即状态空间中经过从一个状态到另一个状态的转换的随机过程。 0 在开始之前请认真理解下面这段话: 决策类求最优解问题&#xf…

25.停车场管理系统(基于web的Java项目)

目录 1.系统的受众说明 2.相关技术与方法 3.系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作可行性 3.2 需求分析 3.2.1 系统功能描述 3.2.2 用例图分析 4. 系统设计 4.1 系统类分析 5. 系统详细设计与实现 5.1 用户登录 5.2 系统信…

【网络】自定义协议——序列化和反序列化

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是序列化和分序列,并且自己能手撕网络版的计算器。 > 毒鸡汤:有些事情,总是不明白,所以我不…

.NET 8 中 Entity Framework Core 的使用

本文代码:https://download.csdn.net/download/hefeng_aspnet/89935738 概述 Entity Framework Core (EF Core) 已成为 .NET 开发中数据访问的基石工具,为开发人员提供了强大而多功能的解决方案。随着 .NET 8 和 C# 10 中引入的改进,开发人…

Docker学习—Docker的安装与使用

Docker安装 1.卸载旧版 首先如果系统中已经存在旧的Docker,则先卸载: yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine2.配置Docker的yum库 首先…

ArcGIS006:ArcMap常用操作151-200例动图演示

摘要:本文介绍了ArcMap邻域分析、栅格表面分析、水文分析、区域分析、提取分析等工具箱中的工具功能。包括计算图层间点、线、面要素间的距离、位置和角度,创建缓冲区,添加计算信息到属性表,分割面要素,编号&#xff0…

小菜家教平台(三):基于SpringBoot+Vue打造一站式学习管理系统

目录 前言 今日进度 详细过程 相关知识点 前言 昨天重构了数据库并实现了登录功能,今天继续进行开发,创作不易,请多多支持~ 今日进度 添加过滤器、实现登出功能、实现用户授权功能校验 详细过程 一、添加过滤器 自定义过滤器作用&…

SQL进阶技巧:如何计算复合增长率?

目录 0 场景描述 1 数据准备 2 问题分析 3 小结 0 场景描述 复合增长率是第N期的数据除以第一期的基准数据,然后开N-1次方再减去1得到的结果。假如2018年的产品销售额为10000,2019年的产品销售额为12500,2020年的产品销售额为15000&…

python-docx -- 读取word图片

文章目录 概念介绍形状对象读取图片自定义图形 概念介绍 从概念上来讲,word文档分为两层,一个文本层,一个绘画层; 文本层,从上到下,从左到右,流式排版,本页填满则开启新页面&#…

Python数据可视化seaborn

产品经理在做数据分析时可能需要通过可视化来分析。seaborn官网 1. relplot 散点图 https://seaborn.pydata.org/examples/scatterplot_sizes.html import pandas as pd import seaborn as sns df pd.DataFrame({x: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],y: [8, 6, 7, 8, 4, 6,…

释放专利力量:Patently 如何利用向量搜索和 NLP 简化协作

作者:来自 Elastic Matt Scourfield, Andrew Crothers, Brian Lambert 组织依靠知识产权 (IP) 来推动创新、保持竞争优势并创造收入来源。对于希望将新产品推向市场的公司来说,弄清楚谁拥有哪些专利是一项必不可少的能力。搜索数百万项专利可能既困难又耗…

协议栈攻击分类(CISP-PTE笔记)

CISP-PTE笔记 协议栈攻击分类 1.协议栈自身的脆弱性 ​ 1)缺乏数据源验证机制 ​ 2)缺乏完整性验证机制 ​ 3)缺乏机密性验证机制 2.网络接口层攻击 3.网络层攻击 4.应用层攻击 网络攻击的基本模式 被动威胁(不影响通信双…

SpringBoot3集成Junit5

目录 1. 确保项目中包含相关依赖2. 配置JUnit 53. 编写测试类4、Junit5 新增特性4.1 注解4.2 断言4.3 嵌套测试4.4 总结 在Spring Boot 3中集成JUnit 5的步骤相对简单。以下是你可以按照的步骤: 1. 确保项目中包含相关依赖 首先,确保你的pom.xml文件中…

智慧城市智慧城市项目方案-大数据平台建设技术方案(原件Word)

第1章 总体说明 1.1 建设背景 1.2 建设目标 1.3 项目建设主要内容 1.4 设计原则 第2章 对项目的理解 2.1 现状分析 2.2 业务需求分析 2.3 功能需求分析 第3章 大数据平台建设方案 3.1 大数据平台总体设计 3.2 大数据平台功能设计 3.3 平台应用 第4章 政策标准保障…

算法练习:904. 水果成篮

题目链接:904. 水果成篮。 题目意思就是可以选取两个种类的水果不能超过两个种类,该种类个数没有限制, 但是一旦超过两个种类的水果就要停止计数。 示例中数组编号就是就是种类,就是不能出现三个不同编号的数。 1.暴力解法&…

wincc中全局脚本C(c语言脚本)的研究和解密

文章目录 前言一、分析 前言 很多时候我们在wincc中写全局脚本时会为自己的脚本添加密码,但很久很久以后再想修改密码忘记了怎么办呢。 一、分析 经过分析编码有了下面成功 ![请添加图片描述](https://i-blog.csdnimg.cn/direct/33baf91a49da410e82f16b4fbd746c48…

Java+控制台 商城销售系统

Java控制台 商城销售系统 一、系统介绍二、功能展示1.系统登陆2.二维数组实现商城销售系统3.类集实现商城销售系统 四、其它1.其他系统实现 一、系统介绍 实现一个xx商城销售系统的登录功能: 1))打开系统,给出欢迎信息。 2)将用户名和密码定…

微服务中常用分布式锁原理及执行流程

1.什么是分布式锁 分布式锁是一种在分布式系统环境下实现的锁机制,它主要用于解决,多个分布式节点之间对共享资源的互斥访问问题,确保在分布式系统中,即使存在有多个不同节点上的进程或线程,同一时刻也只有一个节点可…

A15基于Spring Boot的宠物爱心组织管理系统的设计与实现

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…

测试自动化如何和业务流程结合?

测试自动化框架固然重要,但是最终自动化的目的都是为了业务服务的。 那测试自动化如何对业务流程产生积极影响? 业务流程的重要性 测试自动化项目并非孤立存在,其生命周期与被测试的应用程序紧密相关。项目的价值在于被整个开发团队所使用&a…