2

I'm trying to decrypt a string using RSA and my private key (size 4096). I'm getting the error:

console show error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag this es my code:

public String decrypt(String texte ) throws NoSuchAlgorithmException, NoSuchProviderException, NoSuchPaddingException, InvalidKeySpecException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
    String stringKey = "MIIJJwIBAAKCAgEAuLAzezndEnAt8oT7czUcuZhJfDgrIhOyYOlnfoH8p5vbA8PW OoUoe0Gt85EJT6cRrKv+uB+IfZEMDIML3WXy8k7MJOGuDZVMLf03K6lmP6W1BJXL PrU1d0f88SSWK477LTmIm+PxKBMx7ubJHR71D/abUScyvyhv3hxhYQkRy8NE8kP+ eHfEZQbVfT4h2nvy8q535DqvvU67LE6ZZvlY6tbt5uXllEK633fdcMthO6wHoMui ivGwVTGFhAs74TdeKLhBQXQAUb7ZDCgzEWdaO6TxNEW/WZ4pNl1uOJRhRnK2pGrw RtHD+nexnlMxH9EuAmJnAgdPWG2ShX24Ur1wizL2de55ZVimHCWNMB1L8NsHBe81 A0GXvxWZIePieAtIRPNWQPu1PwokOhaN9PEeL/mQdquFBP1AfZut5uF2qhpKxoCt eD5D3+wIMa4XIzhvYZy0aL7PAIrMVM4yHOegKvqTp1WBeelTiNL/2fHDbZ7FqXNV 5ZsDbDtnut1oZmfv0itoHRlvz2YdXiA6a95xAg2/fLsMpU7XtYZEAFc238sd/mXc +gAVGduZMzR5tY4zEbHWsOu3mqZaYYnhEpYEwz1+XPA+8duGusKJ9HCF4vTPEFFy ooLPjZ609wx/xod1jrto1cgfVF55WfodTHtDHKFZTQsZght1O0e18rss9OsCAwEA AQKCAgAZQifYS4KbmfH+wAcvq2zhSR2LupbTk0QLEwDPgXGPbrZWXns3B60Qplvm +sf+N8goCGHOxqlBGww9zdJali3Sy8oJpT/LpcaEZ6Qa+ZD9VWlbVi00x02noZXL WQicrnJVrg+r2lHJ/E4Q8UlCDVDQvRZi0+yRzjL2eoUq4zWm227bf0cXLLIUawnZ lhzFJ7yDSi8lbI1KY7EfjyRVu/ZYL8rbkEeErlemZltHqNkEczOb3x28yO8nx50O AQdQduUOxpxOGlJM28ANdJX/ZFYn4BgI4R0ZYZMbV03SuSBQpTGrbOCtntShtar6 D0ChrFcRhmm2Ek/ctSeb0CTcVAJHG7R24HzHMB4X4c5/BsVHFqLGORI7+PxUpmT9 EJFykc9eCFEPx8ddJapY76GPmPGI/ssv6VIxGeFz53Fa67tO43aihYEOp2nGLgbo 2Hc3gA4Vo6g7n601eoyWaHztYBy7YQgTTWI0M15VrWrBTj+i0kxSKsDmgvMtIKVV Ocz0wLZw49olWHf8yRO0oS69wwjemjPMTGParVIekTA2cc1DjpKXLNmKjtnYfazr SPfFndqOP8hZXxxf8czlOxX3wCcIGAuONMpnVQrmVMEmFSJkLS4CZFXNuAVgKc32 fMpaRZVICy3X1c5xmffL4u0yKZ6UKwKz7KwJWriH4evq8u7wSQKCAQEA6N/u77P0 hUFMzT4ONZDwfWkl8EmnEvWYiBADfNqugCMGkLvoeks0+KDmA5SHxeKfbN8YvpzL aHcHwhGFEYFYLcpoiTiTNd85qE8caQcDye23aKP3Vy3AlM2gw6yUxknGJoWkHOrO m/4IzcFiJiW/G0bg4AMUhiTPwL22lMJ4bMVCjV0Q9hbwM3gbpgxp6NHY2GiaKhMe 3MolHySJ1aSDVC+uUXopw440IngikmB8Ug+qWhv9JpMy8LRKtYLuB++i2qywJoO+ 0qdsdhXqnVamIFSpv30iVk1yIy+zxCtDpnH40aN6nJfCNqz5/gEiJZDLYBF1ptou 9zOcRaYR2+8YnwKCAQEAywdJiAynnELoMlbvQeQ/sJfES5D9NSpYDvWyprVwgkO5 RHBbZROkTTjDx7pplZCRBpb0ocIGkVCtqbSI99pIZASUkqyABkvBUXy8SfH9sT0n Vx0AjziuMCUexk5pSEOkq72v5JoqYtNmQ8g60NDc0Hck6fMgfN9LZahzEkosUASd FxZaLhr/5jqA+UxI6d1hC3TNtfU9LekCEfx8MIV/g8A/7fp3HLne2npLGkG1JaBq gN6vjvBkctGPN+Zx1wkm7Ksql9hFlk3UYL8/FbEK2+YepDulpuvzzg+NEJxJElMV fGHYn67GU4PjmxVAN+n2RMTUd7L4lDGNWAn4RLmkNQKCAQBOORpLjkkukba4ooWn XJ5LogxKYJMsfS7VVXu2bsZ66EkGSPhYS/bpJTLeNQA+alde/LmVHZn95y3F9Jic PrRd/UWMAmMAj5EQhjJm3SJaq+0Vyy4ELKwpz8CWudvnl1RmEDIGPKFWKMjQRIsx gTBmezKCTMaSIL9gYNl5srE86C3oykAuSZo5z7iJ2FWjDQon90sBoxaU15oMkfty tiYfGz0UxVJOC/BbO7txK9PWxMhWKFyqnntX+1e1DNvj8ozjo2owJcTtgaufJtF+ NGLtLUMvvVrRXoZeZ2GdHWNF/7ayxJUlEJz+PLBksADGWZLXHEZG27c29jEh/By3 oeLFAoIBABbASk0kneO027BIbadEnJ59Y1HUfYtno1aJ0es8ic8PJ8Ozk4pQGSlO IyJOkWZhPN8wK1m1FGdUUyGhSXf8zf/nQ37sNax+8Lrg73iZ1YP3BmGMrnNeNqbO ghRW1RVz/w//waYsYHOSnPMbjPu5bAUwVMKirBFSNHC/36U9Cpos6i2cI57nB6YV CD7nfYQ3eph+Dk9FnAV5BvJdCM2nKBLriD5ywsZFTePNsHzQwCvnPggS7DloVtlH AnWRLVCbhfEffTZm1eVx80qkI72aiUz7DJP62yVJa5i7xWMHIGkdRlsZ29yJCVBy hx7p0rhxT1eFdwmy1IhGxUAIXfnVk8ECggEAYYDkyzD4cfUrUT3RPlT/x43aHlMN dfzV3k/YpOCXPavn41xVFpZtqqkhHcdGigs3RZW0v9eLcNKQVpsN8h2oHoEZkqPs VH7Hirsa4nAQObVvF0bQgUwUEUVo210HhoXj/GuZiUQ7pe5RGdkNYxhs6c0UKky0 xBIvTSh736oHdvqB32Qup7bXg5wPG3Nkys3bb1o8b6d8lBYRaFiadEkHU1F3g+Mu LehAUOrrIBUB8ZFtFCCXH0phtae9LXpfQzeNHkmM0s5zkr2vh0in05pZnqinaLrI EKfoG9rOYkwV8A2NoRvgmv5JbWKeG3kzz17Dg3PfZKpftILTishiCx6WFw==";
    byte[] keyBytes = stringKey.getBytes();
    String painText=texte;


    KeyFactory keyFactory = KeyFactory.getInstance(RSA_ALGORITHM);
    PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
    PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
    Cipher cipher = Cipher.getInstance(CIPHER_RSA_WITH_PADDING, PROVIDER);
    cipher.init(DECRYPT_MODE,privateKey);

    byte[] encryptedMessageBytes = Base64.decode(painText.getBytes().toString(),BASE64_FLAG);
    return new String(cipher.doFinal(encryptedMessageBytes,0,encryptedMessageBytes.length));
}

the error is thrown out here:

 PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
tjheslin1
  • 1,378
  • 6
  • 19
  • 36

1 Answers1

0

I had a similar error when attempting to decode an RSA private key (2048 bits), but only on Marshmallow and older. Nougat and newer worked fine. This is because of the different Security Provider implementations on the different versions of Android. To work around this, I'm using the SpongyCastle provider.

I added the following line to my build.gradle:

implementation 'com.madgag.spongycastle:prov:1.58.0.0'

and the following line to my Application class's onCreate() method

Security.insertProviderAt(org.spongycastle.jce.provider.BouncyCastleProvider(), 1)

For completeness, here's my RSA decryption code:

fun decryptRsa(
  cipherText: String,
  key: String
): String {
  val keySpec = PKCS8EncodedKeySpec(Base64.decode(key, Base64.DEFAULT))
  val factory = KeyFactory.getInstance("RSA")
  val privateKey: PrivateKey = factory.generatePrivate(keySpec) as RSAPrivateKey

  val cipher = Cipher.getInstance("RSA/ECB/PKCS1PADDING")
  cipher.init(Cipher.DECRYPT_MODE, privateKey)

  val encryptedBytes: ByteArray = Base64.decode(cipherText, Base64.DEFAULT)
  return String(cipher.doFinal(encryptedBytes))
}
Andrew Orobator
  • 7,978
  • 3
  • 36
  • 36