我得到了以下异常(到目前为止只有Android4.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吗?
发布于 2015-03-29 03:07:52
在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城堡,或者--为了避免命名冲突-- Spongy城堡。
https://stackoverflow.com/questions/29310199
复制相似问题