
Tive alguns problemas em um projeto próprio com a criptografia RSA, pois o texto criptografado em um APP Android não estava sendo corretamente descriptografado no webservice, mesmo com as chaves pública e privada estando corretas. A exception (BadPaddingException) informava sobre um problema de “padding”. O que descobri e minhas leituras sobre o tema é que aparentemente a inicialização no Cipher feita pela JVM de um sistema desktop/web é diferente da JVM do Android (Dalvik/ART). O padding inserido em um sistema durante a inicialização não estava sendo equivalente ao outro.
A solução que encontrei foi mudar o provider do Cipher no aplicativo Android para “RSA/ECB/PKCS1Padding”, que é um provider específico para a encriptação e mantive o do Webservice para decriptação com o tradicional provider “RSA”.
Cipher.getInstance("RSA/ECB/PKCS1Padding") |