【发布时间】:2021-11-02 18:25:58
【问题描述】:
我的应用程序在一个方法的中间执行停止,例如一个解密方法(我也看到了其他方法)。在 Netbeans (12.3) 中,执行按预期进行。但是当我执行 jar 文件(在 Netbeans 中构建)时,问题就出现了。
例如:
private void doIt() {
//log is my own logging class
log.info("pass: " + decrypt("TKRVAAmZaBuB4vlXQP6aOA=="));
}
public String decrypt(String strToDecrypt) {
try {
log.info("decrypt() " + strToDecrypt);
byte[] iv = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
log.info("iv: " + iv);
IvParameterSpec ivspec = new IvParameterSpec(iv);
log.info("IvParameterSpec ivspec = new IvParameterSpec(iv);");
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
log.info("SecretKeyFactory factory = SecretKeyFactory.getInstance(PBKDF2WithHmacSHA256);");
KeySpec spec = new PBEKeySpec(SECRET_KEY.toCharArray(), SALT.getBytes(), 65536, 256);
log.info(" KeySpec spec = new PBEKeySpec(SECRET_KEY.toCharArray(), SALT.getBytes(), 65536, 256);");
SecretKey tmp = factory.generateSecret(spec);
log.info("SecretKey tmp = factory.generateSecret(spec);");
SecretKeySpec secretKey = new SecretKeySpec(tmp.getEncoded(), "AES");
log.info("SecretKeySpec secretKey = new SecretKeySpec(tmp.getEncoded(),AES);");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
log.info("Cipher cipher = Cipher.getInstance(AES/CBC/PKCS5PADDING);");
cipher.init(Cipher.DECRYPT_MODE, secretKey, ivspec);
log.info(" cipher.init(Cipher.DECRYPT_MODE, secretKey, ivspec);");
String s = new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
log.info("return" + s);
return s;
} catch (Exception e) {
//TODO
log.logException(StocktransmitterApp.class, e);
}
return null;
}
在jar中执行后记录:
2021-09-05 08:56:22 INFO decrypt() TKRVAAmZaBuB4vlXQP6aOA==
2021-09-05 08:56:22 INFO iv: [B@3abbfa04
2021-09-05 08:56:22 INFO IvParameterSpec ivspec = new IvParameterSpec(iv);
其他信息
- Jar 由 Netbeans 构建
- 该 jar 由 Launch4j exe 调用
- 该应用程序是一个模块化应用程序
- JDK 更新到最新版本:16.0.2.7
- 执行来自自定义 jre(由 jlink 构建)
罐子不稳定
这是一种奇怪的行为。我不知道如何解决 有什么想法或建议吗?
【问题讨论】:
-
log.logException我知道没有使用该方法的日志记录 API。 您使用的是哪个 API?