2017-10-11 134 views
2
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

回答

4

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