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 secret
            SecretKeySpec secretKeySpec = new SecretKeySpec(secret.getBytes(), "HmacSHA256");

            // Get an instance of Mac object implementing HMAC-SHA256
            Mac mac = Mac.getInstance("HmacSHA256");
            mac.init(secretKeySpec);

            // Calculate the HMAC value
            byte[] hmacBytes = mac.doFinal(data.getBytes());

            // Convert result into a hexadecimal string
            StringBuilder 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
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python TensorFlow】进阶指南

在前文中,我们介绍了TensorFlow的基础知识及其在实际应用中的初步使用。现在,我们将进一步探讨TensorFlow的高级特性,包括模型优化、评估、选择、高级架构设计、模型部署、性能优化等方面的技术细节,帮助读者达到对TensorFlow的精…

Vue实现登录功能

一、Vue登录逻辑梳理: 1、登录流程: 用户在前端输入用户名和密码,点击登录按钮。 登录成功后的逻辑: 主要功能和流程: 异步函数 signInSuccess:这是一个异步函数,使用了 async 关键字&#xff…

「Mac畅玩鸿蒙与硬件26」UI互动应用篇3 - 倒计时和提醒功能实现

本篇将带领你实现一个倒计时和提醒功能的应用,用户可以设置倒计时时间并开始计时。当倒计时结束时,应用会显示提醒。该项目涉及时间控制、状态管理和用户交互,是学习鸿蒙应用开发的绝佳实践项目。 关键词 UI互动应用倒计时器状态管理用户交互…

(62)使用RLS自适应滤波器进行系统辨识的MATLAB仿真

文章目录 前言一、基本概念二、RLS算法原理三、RLS算法的典型应用场景四、MATLAB仿真代码五、仿真结果1.滤波器的输入信号、参考信号、输出信号、误差信号2.对未知系统进行辨识得到的系数 总结与后续 前言 RLS(递归最小二乘)自适应滤波器是一种用于系统…

Oracle 12C安装教程

Oracle 12c,全称Oracle Database 12c,是Oracle 11g的升级版,新增了很多新的特性。 Oracle 12c下载 打开Oracle的官方中文网站,选择相应的版本即可。 下载地址:http://www.oracle.com/technetwork/cn/database/enterp…

探索空间计算与 VR 设备的未来:4K4DGen 高分辨率全景 4D 内容生成系统

在当今科技飞速发展的时代,空间计算和 VR 设备正逐渐成为人们体验沉浸式场景的重要工具。而今天,我们要为大家介绍一款具有创新性的技术 ——4K4DGen 高分辨率全景 4D 内容生成系统,它为 VR/AR 沉浸式体验带来了全新的可能性。 一、项目概述 4K4DGen 项目的核心目标是实现 …

【无标题】项目管理软件:日常任务管理,TODO任务清单

无论是在工作、学习还是个人事务的处理上,我们都面临着众多的任务和事项。而 TODO 任务管理,可以帮助我们高效、有序的完成工作任务。 TODO 任务管理的重要性: TODO 任务管理不仅仅是简单地列出要做的事情,它是一种系统性的方法…

数据库中的用户管理和权限管理

​ 我们进行数据库操作的地方其实是数据库的客户端,是我们在客户端将操作发送给数据库的服务器(MySQL的服务器是mysqld),由数据库处理之后发送回来处理结果(其实就是一种网络服务)。所以可以存在多个客户端…

HTML 块级元素和内联(行内)元素详解

在 HTML 中,元素根据它们在页面中的表现方式分为两类:块级元素 和 内联元素(行内元素)。了解块级元素和内联元素的特性与使用方法,是掌握HTML开发的重要基础。本文将深入探讨这两类元素的特点及其在实际开发中的应用。 文章目录 一、块级元素1.1 块级元素是什么?1.2 块级…

科研绘图系列:R语言差异分析双侧柱状图(grouped barplot)

文章目录 介绍加载R包数据画图系统信息介绍 双侧柱状图(grouped barplot),也称为分组柱状图,是一种用于展示不同组别之间比较的数据可视化图表。它通过将不同组别的柱状图并排放置,可以直观地比较不同组在各个类别上的表现或特征。以下是双侧柱状图的一些关键特点和用途:…

【数据结构】哈希/散列表

目录 一、哈希表的概念二、哈希冲突2.1 冲突概念2.2 冲突避免2.2.1 方式一哈希函数设计2.2.2 方式二负载因子调节 2.3 冲突解决2.3.1 闭散列2.3.2 开散列(哈希桶) 2.4 性能分析 三、实现简单hash桶3.1 内部类与成员变量3.2 插入3.3 获取value值3.4 总代码…

Go语言基础语法

一、创建工程 说明: (1)go.mod文件是go项目依赖管理文件,相当于前端的package.json,也就是Java项目中的Maven的pom.xml。 二、打印数据到控制台 (1)引入fmt (2)使用fmt…

class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.sys

class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.sys ry-cloud报错原因解决 ry-cloud 报错 系统监控→在线用户打开后报错 报错信息如下 class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.sys原因 type导致&#xff…

用 Python 从零开始创建神经网络(一)

用 Python 从零开始创建神经网络(一) 引言1. A Single Neuron:Example 1代码部分: Example 2代码部分: 2. A Layer of Neurons:Example 1代码部分: 引言 本教程专为那些对神经网络已有基础了解…

双指针算法习题解答

1.移动零 题目链接:283. 移动零 - 力扣(LeetCode) 题目解析:该题要求将数组中为0的元素全部转移到数组的末尾,同时不能改变非零元素的相对位置。 解题思路:我们可以用变量dest和cur将该数组分为三个区域。…

思源笔记轻松连接本地Ollama大语言模型,开启AI写作新体验!

文章目录 前言1. 下载运行Ollama框架2. Ollama下载大语言模型3. 思源笔记设置连接Ollama4. 测试笔记智能辅助写作5. 安装Cpolar工具6. 配置Ollama公网地址7. 笔记设置远程连接Ollama8. 固定Ollama公网地址 前言 今天我们要聊聊如何通过cpolar内网穿透技术,把国产笔…

SAP ABAP开发学习——WDA 五 使用表格控件实例

目录 实现 先建一个Web Dynpro Component 将两个view关联 input_view中添加按钮 output_view创建按钮 创建一个服务 input_view中使用向导创建两个输入框 output部分创建输出表单 output inbound 创建APPLICATION 效果 实现 先建一个Web Dynpro Component 将两个vi…

qt QCompleter详解

1、概述 QCompleter是Qt框架中的一个类,用于为文本输入提供自动完成功能。它可以与Qt的输入控件(如QLineEdit、QTextEdit等)结合使用,根据用户的输入实时过滤数据源,并在输入控件下方或内部显示补全建议列表。用户可以…

数据采集-Kepware连接倍福(Beckhoff)PLC(OPCUA协议)

KepserverEX 连接倍福(beckhoff)-ADS协议 系列文章目录 数据采集-Kepware 安装证书异常处理 数据采集-Kepware OPCUA 服务器实现 数据采集-Kepware连接倍福(Beckhoff)PLC(ADS协议) 目录 KepserverEX 连接倍福(beckhoff)-ADS协议系列文章目录前言一、OPC UA(OPC统一…

vue中html如何转成pdf下载,pdf转base64,忽略某个元素渲染在pdf中,方法封装

一、下载 html2Canvas jspdf npm install jspdf html2canvas二、封装转换下载方法 htmlToPdf.js import html2Canvas from html2canvas import JsPDF from jspdf/*** param {*} reportName 下载时候的标题* param {*} isDownload 是否下载默认为下载,传false不…