Android是否支持AES256/CTR/NoPadding?

问题描述:

Cipher cipher = Cipher.getInstance("AES256/CTR/NoPadding") 

上面代码抛出以下异常:Android是否支持AES256/CTR/NoPadding?

堆栈跟踪:java.security.NoSuchAlgorithmException: AES256/CTR/NoPadding在 javax.crypto.Cipher.getCipher(Cipher.java:296)在 javax.crypto.Cipher.getInstance(Cipher.java:174)

不支持Android “AES256/CTR/NoPadding”?这个设备是否依赖?在Android设备我测试有下列提供:

  • AndroidOpenSSL版本1.0
  • DRLCertFactory版本1.0
  • BC 1.47版本
  • 加密版本1.0
  • HarmonyJSSE版本1.0

Cipher.java您可以看到可用的转换。不幸的是,没有“AES256/CTR/NoPadding”(这就是为什么你会看到这个例外),但当然有“AES/CTR/NoPadding”,你应该使用它。

AES密钥大小(在Cipher中使用)完全取决于Android中的密钥,所以您应该生成并使用适当长度的密钥。

API等级26+你可以直接使用 “AES_256 ......” 但仅限于CBC和ECB模式(https://developer.android.com/reference/javax/crypto/Cipher.html

+0

“在Cipher.java ......” 哪里是Cipher.java? –

+0

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

+2

谢谢。我用256位密钥尝试过Cipher.getInstance(“AES/CTR/NoPadding”),并且它似乎可行。我需要一点时间来确认它。 – Hong