2016-07-25 1 views
0

私はBouncy Castleを使用してCMSで暗号化されたデータを持っており、その内容を解読したいと思います。しかし、私はjavax.crypto.BadPaddingException: pad block corruptedを取得する問題に遭遇しています。私は秘密鍵に何か問題があると信じています。Bouncy CastleでCMSEncryptedDataの解読がBadPaddingExceptionをスローする:パッドブロックが壊れた

val provider = new BouncyCastleProvider() 

// output encoder 
val gen = new CMSEncryptedDataGenerator() 
val encoder = new JceCMSContentEncryptorBuilder(CMSAlgorithm.DES_EDE3_CBC).setProvider(BouncyCastleProvider.PROVIDER_NAME).build() 

// secrete key 
val spec = new DESedeKeySpec(encoder.getKey.getRepresentation.asInstanceOf[Array[Byte]]) 
val keyFactory = SecretKeyFactory.getInstance("DESEDE", provider) 
val secretKey = keyFactory.generateSecret(spec) 

// Encryption 
val cmsEncryptedData: CMSEncryptedData = gen.generate(new CMSProcessableByteArray("Hello World!".getBytes()), encoder) 

// Decryption 
val decryptedContententBinary: Array[Byte] = { 
    cmsEncryptedData.getContent(new InputDecryptorProvider { 
    override def get(algorithm: AlgorithmIdentifier): InputDecryptor = new InputDecryptor { 

     override def getAlgorithmIdentifier: AlgorithmIdentifier = algorithm 

     override def getInputStream(encIn: InputStream): InputStream = { 
     val parameters = new JceAlgorithmIdentifierConverter().setProvider(provider).getAlgorithmParameters(algorithm) 
     val cipher = Cipher.getInstance(parameters.getAlgorithm, provider) 
     cipher.init(Cipher.DECRYPT_MODE, secretKey, parameters) // throws javax.crypto.BadPaddingException: pad block corrupted 
     new CipherInputStream(encIn, cipher) 
     } 
    } 
    }) 
} 
+0

これはScalaですよね?スカラーでない場合は、言語タグを含めるように質問を編集してください。 –

答えて

0

私はただの問題を解決しました。ここに作業コードがあります:

// output encoder 
val gen = new CMSEncryptedDataGenerator() 
val random = new SecureRandom() 
val encoder = new JceCMSContentEncryptorBuilder(CMSAlgorithm.DES_EDE3_CBC).setProvider(BouncyCastleProvider.PROVIDER_NAME).setSecureRandom(random).build() 


// secrete key 
val key = new SecretKeySpec(encoder.getKey.getRepresentation.asInstanceOf[Array[Byte]], "DESede") 

// Encryption 
val cmsEncryptedData: CMSEncryptedData = gen.generate(new CMSProcessableByteArray("Hello World!".getBytes()), encoder) 


// Decryption 
val decryptedContententBinary: Array[Byte] = { 
    cmsEncryptedData.getContent(new InputDecryptorProvider { 
    override def get(algorithm: AlgorithmIdentifier): InputDecryptor = new InputDecryptor { 

     override def getAlgorithmIdentifier: AlgorithmIdentifier = algorithm 

     override def getInputStream(encIn: InputStream): InputStream = { 

     val parameters = new JceAlgorithmIdentifierConverter().setProvider(provider).getAlgorithmParameters(encoder.getAlgorithmIdentifier) 
     val cipher = Cipher.getInstance(algorithm.getAlgorithm.getId, provider) 
     cipher.init(Cipher.DECRYPT_MODE, key, parameters) 
     new CipherInputStream(encIn, cipher) 
     } 
    } 
    }) 
} 
関連する問題