最近接到一个需求,做一个可以用来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.");
}
}
}
HmacSha256-jdk5\src> java -version
java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-b)
Java HotSpot(TM) Client VM (build 1.5.0-b, mixed mode, sharing)
HmacSha256\HmacSha256-jdk5\src> javac .\HmacSha256.java
jar
命令将文件打包成 JAR 文件,还是在进到class文件所在的目录,编译后的 .class
文件为 HmacSha256.class
:jar cvf HmacSha256-jdk5.jar .\HmacSha256.class
在上述命令中,cvf
是 jar
命令的参数,用于指定不同的操作和选项。以下是每个参数的含义:
c
:表示创建新的 JAR 文件。v
:表示在标准输出中生成详细输出,即显示创建 JAR 文件的详细过程。f
:表示指定 JAR 文件的名称。在这种情况下,HmacSha256-jdk5.jar
是要创建的 JAR 文件的名称。如果你想直接调用 HmacSha256
类中的 main
方法,你可以通过反射来实现。在你的 shell 脚本中,你可以使用以下命令来执行该操作:
java -cp HmacSha256-jdk5.jar HmacSha256 0 1
在这个命令中:
-cp HmacSha256-1.0.jar
指定了类路径,告诉 Java 虚拟机在哪里找到 HmacSha256
类。HmacSha256
是你要执行的类名。和
1会作为
main方法的参数传递给
HmacSha256` 类。比对结果和预期一致
windows脚本验证jar中的class版本
javap -verbose -classpath .\HmacSha256-jdk6.jar HmacSha256
-cp
参数指定类路径这也是这篇文章出现的原因,目标环境只能执行jdk1.5版本的代码
maven插件还是目前最常用的方式,这里简单写了一个demo在仓库中
基于idea的打包方式也是很常用的方法,这个方式最低需要1.6版本的jdk
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- niushuan.com 版权所有 赣ICP备2024042780号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务