Decrypt Camunda Sealed Object in Scala
Camunda runs on JVM and some variables appear encrypted as javax.crypto.SealedObject.

You can decrypt it, having encryption key, and here is a code in Scala to do that:
1import org.bouncycastle.jce.provider.BouncyCastleProvider
2
3import java.io._
4import java.util.Base64
5import java.security.Security
6import javax.crypto.spec.{PBEKeySpec, PBEParameterSpec}
7import javax.crypto.{Cipher, SealedObject, SecretKeyFactory}
8
9val sealedString = "rO0ABX..."
10
11// sealed object
12val xBytes = Base64.getDecoder.decode(sealedString)
13val xOis = new ObjectInputStream(new ByteArrayInputStream(xBytes))
14val xSO = xOis.readObject().asInstanceOf[SealedObject]
15
16Security.addProvider(new BouncyCastleProvider())
17
18val phrase = "secret phrase value".toCharArray
19val salt = "salt value".getBytes
20val pbeParamSpec = new PBEParameterSpec(salt, 20)
21val pbeKeySpec = new PBEKeySpec(phrase)
22val keyFactory = SecretKeyFactory.getInstance(xSO.getAlgorithm)
23val key = keyFactory.generateSecret(pbeKeySpec)
24val cipher = Cipher.getInstance(xSO.getAlgorithm)
25cipher.init(Cipher.DECRYPT_MODE, key, pbeParamSpec)
26
27val raw = xSO.getObject(cipher) // <- decrypted string
For this to work you need to reference BouncyCastle in your sbt file:
1libraryDependencies += "org.bouncycastle" % "bcprov-jdk16" % "1.46"
Result:


Have feedback or questions? Feel free to email me.