java.security.NoSuchAlgorithmException:未找到KeyGenerator AES实现

时间:2015-03-27 21:05:37

标签: android aes

我收到以下异常(到目前为止只有Android 4.0.4):

java.security.NoSuchAlgorithmException: KeyGenerator AES implementation not found
       at org.apache.harmony.security.fortress.Engine.notFound(Engine.java:177)
       at org.apache.harmony.security.fortress.Engine.getInstance(Engine.java:151)
       at javax.crypto.KeyGenerator.getInstance(KeyGenerator.java:103)

这是我的代码:

 KeyGenerator keyGen = KeyGenerator.getInstance("AES");
 keyGen.init(128);
 SecretKey confidentialityKey = keyGen.generateKey();

某些Android版本不支持128 AES吗?

1 个答案:

答案 0 :(得分:0)

你真的不需要Java中的AES密钥工厂。 AES密钥只包含随机字节。这意味着您可以执行以下操作:

SecureRandom rng = new SecureRandom();

byte[] aesKeyData = new byte[128 / Byte.SIZE];
rng.nextBytes(aesKeyData);
SecretKey aesKey = new SecretKeySpec(aesKeyData, "AES");

// just to show it works
Cipher aesCBC = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] iv = new byte[aesCBC.getBlockSize()];
rng.nextBytes(iv);
aesCBC.init(Cipher.ENCRYPT_MODE, aesKey, new IvParameterSpec(iv));

唯一的问题是您不能以这种方式在硬件设备上生成AES密钥;为此你需要一个KeyFactory


如果你有一个需要密钥生成器的库,那么你最好安装Bouncy Castle或者 - 以避免命名冲突 - Spongy Castle。