gpt4 book ai didi

java - 在代码中解密 AES 加密的授权 token 方法时 Jar 崩溃。 hs_err _pid 文件提到 arrayof_jbyte_fill

转载 作者:行者123 更新时间:2023-12-05 07:03:26 24 4
gpt4 key购买 nike

此问题在生产环境中大约每天发生一次。负载约为 20TPS,服务器上的每个请求都会调用 AES 解密两次。该错误不是针对所有请求生成的,而是每天崩溃一次。以下是 hs_err_pid 文件的片段。

Java 运行时环境检测到 fatal error :

SIGSEGV (0xb) 在 pc=0x00007f26cc5de47e,pid=53978,tid=0x00007f26837f7700JRE 版本:Java(TM) SE Runtime Environment (8.0_241-b31) (build 1.8.0_241-b31)Java VM:Java HotSpot(TM) 64 位服务器 VM(25.241-b31 混合模式 linux-amd64 压缩 oops)有问题的框架:v ~StubRoutines::arrayof_jbyte_fill

Current thread (0x00007f26d0a03800):  JavaThread "http-nio-9094-exec-10" daemon 
[_thread_in_Java, id=54617, stack(0x00007f26836f7000,0x00007f26837f8000)]


Stack: [0x00007f26836f7000,0x00007f26837f8000], sp=0x00007f26837f44f0, free space=1013k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
v ~StubRoutines::arrayof_jbyte_fill
J 26458 C2 java.util.Arrays.fill([BB)V (21 bytes) @ 0x00007f26cc737ca2
[0x00007f26cc737c60+0x42]
j com.sun.crypto.provider.CipherCore.fillOutputBuffer([BI[BII[B)I+73
j com.sun.crypto.provider.CipherCore.doFinal([BII)[B+65
j com.sun.crypto.provider.AESCipher.engineDoFinal([BII)[B+7
j javax.crypto.Cipher.doFinal([B)[B+30
j com.hello.genesys.common.AES.decrypt([BLjava/lang/String;)[B+92

解密方法如下:

public static byte[] decrypt(byte[] data, String password) throws Exception {
try {
log.info("/// Inside the decrypter method of AES class ////");
if (null == cipher) {
log.info("The Cipher is null and hence forming new object of cipher");
cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
}

log.info("Key generation method to be called");
Key k = new SecretKeySpec(password.getBytes(), AES_ENCRYPTION_TYPE);

log.info("Cipher initialization to be done");
cipher.init(Cipher.DECRYPT_MODE, k);

log.info("The byte array value to be returned");

return cipher.doFinal(data);
} catch (Throwable e) {
log.info("Inside Exception of AES decryption method");
e.printStackTrace();
}
return null;
}

此方法在不同的类中调用:

byte[] decrypter = AES.decrypt(decodeToken, _env("tokenSalt"));

它不会抛出异常,但会因 arrayof_jbyte_fill 相关错误而崩溃。请帮我解决这个问题,因为它只出现在生产环境中,而在低层环境中不会出现。链接到 hs_err_pid 文件以获取更多详细信息:https://drive.google.com/file/d/1WDG4rm7vIw6HDbhZPtXjud7r8TEh4d74/view?usp=sharing

最佳答案

错误在于密码对象本身。我现在已经创建并初始化了一个本地密码对象而不是全局密码对象,并且在部署后 2 周内似乎没有崩溃。因此,由于 2 个解密过程背靠背同时发生,因此在第二次解密请求期间它会崩溃,因为第一个解密请求仍在使用该对象。所以这是我对这个问题的分析

关于java - 在代码中解密 AES 加密的授权 token 方法时 Jar 崩溃。 hs_err _pid 文件提到 arrayof_jbyte_fill,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63222761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com