当前位置: 首页 > 知识库问答 >
问题:

Jar在解密代码中AES加密的授权令牌方法时崩溃。hs\u err \u pid文件提到数组f\u jbyte\u fill

常海
2023-03-14

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

Java运行时环境检测到致命错误:

SIGSEGV(0xb)at pc=0x00007f26cc5de47e,pid=53978,tid=0x00007f26837f7700 JRE版本:Java(TM)SE Runtime Environment(8.0\u 241-b31)(build 1.8.0\u 241-b31)Java VM:Java HotSpot(TM)64位服务器VM(25.241-b31混合模式linux-amd64压缩oops)有问题的帧:v ~ StubRoutines::arrayof\u jbyte\u 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\u err\u pid文件:https://drive.google.com/file/d/1WDG4rm7vIw6HDbhZPtXjud7r8TEh4d74/view?usp=sharing

共有1个答案

东郭自珍
2023-03-14

这个错误与密码对象本身有关。我现在创建了

 类似资料:
  • 我执行本问题中描述的步骤: Laravel的5.3护照和api路由 从api的路径来看,一切都很好,我可以注册新用户,读取他们的数据等等。 然后在AuthServiceProvider上添加此命令 护照::代币ExpireIn(碳::现在()- 我以url{{url}}/oauth/token登录邮递员 正文:application/x-www-form-urlencoded { 授权类型:{pa

  • 我使用Botan库进行加密,我的加密代码如下所示。 这段代码看起来很好,可以加密输入文件。我发布这段代码是为了确定加密是否有错误。(但我假设加密做得正确)

  • OpenSSL提供了一个流行的(但不安全-请参见下面!)AES加密的命令行界面: Python以PyCrypto包的形式支持AES,但它只提供了工具。如何使用Python/Pycrypto解密已经使用OpenSSL加密的文件? 这个问题过去也涉及使用相同方案在Python中进行加密。我已经删除了这部分,以阻止任何人使用它。不要再用这种方式加密任何数据,因为按照今天的标准,它是不安全的。您应该只使用

  • 这是我第一次在这里寻求帮助,我的部门(政府)已经在市场上发布了一些应用程序(Google Play),直到昨天,当我在Nexus上获得Jelly Bean 4.2时,加密和描述一直运行得很好。加密工作正常,它实际上加密了要存储的信息。虽然当解密它时,我得到了一个异常,就像这样:填充块损坏。我已经检查了字符串,并且它与其他设备上的字符串一致(出于测试目的使用相同的密钥),这意味着它完全相同。问题是我

  • 我想做一个简单的应用程序加密/解密与AES的消息。我的代码似乎现在工作,因为我得到的文本加密和解密没有任何问题。 我有一个输入字段、一个输入密码用于解密/加密的字段和一个输出字段。和两个按钮(加密/解密)。 问题是****,当我输入一条消息,设置密码并对其进行加密,然后试图引发无效的密码获取时,尽管输入的密码与我用于加密的密码不匹配,但消息还是会解密。 下面是我的密钥生成代码: 这里是我加密消息的

  • 问题内容: 我找到了用Java实施AES加密/解密的指南,并试图理解每一行并将其放入自己的解决方案中。但是,我没有完全理解它,因此出现了问题。最终目标是拥有基于密码的加密/解密。我已经阅读了有关此的其他文章/ stackoverflow帖子,但是大多数文章没有提供足够的解释(我对Java加密非常陌生) 我现在的主要问题是,即使设置了 I,最后还是会得到不同的Base64结果(每次都是随机的,但是我