2017-10-11 2 views
2
Cipher cipher = Cipher.getInstance("AES256/CTR/NoPadding") 

Le code ci-dessus lève l'exception suivante:Est-ce que Android prend en charge AES256/CTR/NoPadding?

trace Stack: java.security.NoSuchAlgorithmException: AES256/CTR/NoPadding à javax.crypto.Cipher.getCipher (Cipher.java:296) à javax.crypto.Cipher.getInstance (Cipher.java:174)

pris en charge par Android "AES256/CTR/NoPadding"? Cet appareil est-il dépendant? L'appareil Android Je teste a les fournisseurs suivants:

  • Version AndroidOpenSSL 1.0
  • version DRLCertFactory 1.0
  • version BC 1,47
  • Version Crypto 1.0
  • Version HarmonyJSSE 1,0

Répondre

4

Dans Cipher.java Vous pouvez voir les transformations disponibles. Malheureusement, il n'y a pas "AES256/CTR/NoPadding" (et c'est pourquoi vous voyez cette exception) mais il y a bien sûr "AES/CTR/NoPadding" et vous devriez l'utiliser. La taille de clé AES (telle qu'utilisée dans Cipher) dépend entièrement de la clé dans Android, vous devez donc simplement générer et utiliser une clé de longueur appropriée.

Au niveau Api 26+ vous pouvez utiliser directement "AES_256 ..." mais seulement pour les modes CBC et de la BCE (https://developer.android.com/reference/javax/crypto/Cipher.html)

+0

"Dans Cipher.java ..." Où est Cipher.java? –

+0

https://developer.android.com/reference/javax/crypto/Cipher.html – lesniak

+2

Merci. J'ai essayé Cipher.getInstance ("AES/CTR/NoPadding") avec une clé de 256 bits, et il semble fonctionner. Il me faudra un peu de temps pour le confirmer. – Hong