首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.security.NoSuchAlgorithmException:找不到KeyGenerator AES实现

java.security.NoSuchAlgorithmException:找不到KeyGenerator AES实现
EN

Stack Overflow用户
提问于 2015-03-27 21:05:37
回答 1查看 4K关注 0票数 0

我得到了以下异常(到目前为止只有Android4.0.4):

代码语言:javascript
复制
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)

这是我的密码:

代码语言:javascript
复制
 KeyGenerator keyGen = KeyGenerator.getInstance("AES");
 keyGen.init(128);
 SecretKey confidentialityKey = keyGen.generateKey();

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

EN

回答 1

Stack Overflow用户

发布于 2015-03-29 03:07:52

在Java中,您真的不需要AES的关键工厂。AES键只是由随机字节组成。因此,这意味着您可以执行以下操作:

代码语言:javascript
复制
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城堡。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29310199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档