From 17029ce67cf605186a4406ac6cb956abcfd5dcac Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Mon, 29 Mar 2021 12:42:53 +0200 Subject: [PATCH] Fix bad padding exception --- .../main/java/com/kunzisoft/encrypt/CipherFactory.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/crypto/src/main/java/com/kunzisoft/encrypt/CipherFactory.kt b/crypto/src/main/java/com/kunzisoft/encrypt/CipherFactory.kt index c2830f814..588d97eba 100644 --- a/crypto/src/main/java/com/kunzisoft/encrypt/CipherFactory.kt +++ b/crypto/src/main/java/com/kunzisoft/encrypt/CipherFactory.kt @@ -7,6 +7,7 @@ import java.security.InvalidAlgorithmParameterException import java.security.InvalidKeyException import java.security.NoSuchAlgorithmException import java.security.Security +import javax.crypto.BadPaddingException import javax.crypto.Cipher import javax.crypto.NoSuchPaddingException import javax.crypto.spec.IvParameterSpec @@ -39,7 +40,16 @@ object CipherFactory { @Throws(NoSuchAlgorithmException::class, NoSuchPaddingException::class, InvalidKeyException::class, InvalidAlgorithmParameterException::class) fun getTwofish(opmode: Int, key: ByteArray, IV: ByteArray): Cipher { - val cipher: Cipher = Cipher.getInstance("Twofish/CBC/PKCS7PADDING") + val cipher: Cipher = try { + Cipher.getInstance("Twofish/CBC/PKCS7PADDING") + } catch (e: BadPaddingException) { + // Retry with other padding if don't work + if (opmode == Cipher.ENCRYPT_MODE) { + Cipher.getInstance("Twofish/CBC/ZeroBytePadding") + } else { + Cipher.getInstance("Twofish/CBC/NoPadding") + } + } cipher.init(opmode, SecretKeySpec(key, "AES"), IvParameterSpec(IV)) return cipher }