Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8357012

Behavioral discrepancy in encryption initialization between HotSpot and OpenJ9

XMLWordPrintable

      ADDITIONAL SYSTEM INFORMATION :
      Linux 5.15.167.4-microsoft-standard-WSL2 #1 SMP Tue Nov 5 00:21:55 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
      WSL2 Ubuntu 22.04

      java 21.0.7 2025-04-15 LTS
      Java(TM) SE Runtime Environment (build 21.0.7+8-LTS-245)
      Java HotSpot(TM) 64-Bit Server VM (build 21.0.7+8-LTS-245, mixed mode, sharing)

      openjdk 21.0.7 2025-04-15 LTS
      IBM Semeru Runtime Open Edition 21.0.7.0 (build 21.0.7+6-LTS)
      Eclipse OpenJ9 VM 21.0.7.0 (build openj9-0.51.0, JRE 21 Linux amd64-64-Bit Compressed References 20250415_458 (JIT enabled, AOT enabled)
      OpenJ9 - 31cf5538b0
      OMR - 9bcff94a2
      JCL - 26c2dc3d801 based on jdk-21.0.7+6)

      A DESCRIPTION OF THE PROBLEM :
      Compiling and running the test case using Hotspot will throw a `InvalidKeyException`.
      However, using OpenJ9 the test case will run successfully.

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      >>> javac Test.java
      >>> path/to/hotspot-21/bin/java Test
      java.security.InvalidKeyException: Wrong algorithm: AES or Rijndael required
          at java.base/com.sun.crypto.provider.AESCrypt.init(AESCrypt.java:1043)
          at java.base/com.sun.crypto.provider.CipherBlockChaining.init(CipherBlockChaining.java:97)
          at java.base/com.sun.crypto.provider.CipherCore.init(CipherCore.java:481)
          at java.base/com.sun.crypto.provider.CipherCore.init(CipherCore.java:399)
          at java.base/com.sun.crypto.provider.AESCipher.engineInit(AESCipher.java:311)
          at java.base/javax.crypto.Cipher.implInit(Cipher.java:872)
          at java.base/javax.crypto.Cipher.chooseProvider(Cipher.java:934)
          at java.base/javax.crypto.Cipher.init(Cipher.java:1313)
          at java.base/javax.crypto.Cipher.init(Cipher.java:1246)
          at Test.main(Test.java:8)
      >>> path/to/openj9-21/bin/java Test
      # Execute successfully

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Execute successfully
      ACTUAL -
      java.security.InvalidKeyException: Wrong algorithm: AES or Rijndael required
          at java.base/com.sun.crypto.provider.AESCrypt.init(AESCrypt.java:1043)
          at java.base/com.sun.crypto.provider.CipherBlockChaining.init(CipherBlockChaining.java:97)
          at java.base/com.sun.crypto.provider.CipherCore.init(CipherCore.java:481)
          at java.base/com.sun.crypto.provider.CipherCore.init(CipherCore.java:399)
          at java.base/com.sun.crypto.provider.AESCipher.engineInit(AESCipher.java:311)
          at java.base/javax.crypto.Cipher.implInit(Cipher.java:872)
          at java.base/javax.crypto.Cipher.chooseProvider(Cipher.java:934)
          at java.base/javax.crypto.Cipher.init(Cipher.java:1313)
          at java.base/javax.crypto.Cipher.init(Cipher.java:1246)
          at Test.main(Test.java:8)

      ---------- BEGIN SOURCE ----------
      public class Test {
          public static void main(String[] args) throws Exception {
              javax.crypto.SecretKeyFactory factory = javax.crypto.SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
              javax.crypto.spec.PBEKeySpec spec = new javax.crypto.spec.PBEKeySpec("securePassword".toCharArray(), "randomSalt".getBytes(), 65536, 256);
              javax.crypto.SecretKey secretKey = factory.generateSecret(spec);
              try {
                  javax.crypto.Cipher cipherInstance = javax.crypto.Cipher.getInstance("AES/CBC/PKCS5Padding");
                  cipherInstance.init(javax.crypto.Cipher.ENCRYPT_MODE, secretKey);
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
      ---------- END SOURCE ----------

            tongwan Andrew Wang
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: