欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > JDK1.5 java代码打包jar HmacSha256

JDK1.5 java代码打包jar HmacSha256

2024/11/8 9:42:24 来源:https://blog.csdn.net/qq_42320804/article/details/143470683  浏览:    关键词: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
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com