2012-02-06 145 views
2

我知道这个问题在StackOverflow中非常流行,AES 256如何在Android中实现,但主要问题是没有任何解决方案给出AES 256的确切加密和解密。所有代码都通过Key长度128和256不正确。AES 256加密实现android

KeyGenerator kgen = KeyGenerator.getInstance("AES"); 
     SecureRandom sr = SecureRandom.getInstance("SHA1PRNG"); 
     sr.setSeed(seed); 
     kgen.init(256, sr); // 192 and 256 bits may not be available 
     SecretKey skey = kgen.generateKey(); 
     byte[] raw = skey.getEncoded(); 
     return raw; 

但我需要不同于此,其中AES 256实现不是256键的长度。请给我建议正确的解决方案。

在此先感谢。

+0

我不知道我理解你的问题。您的问题是:“如果我的密钥材料不是128位或256位,我如何制作AES-128或AES-256密钥?” – 2012-02-06 10:29:05

+0

是的大卫.......这是个问题。 – 2012-02-06 10:43:16

+0

你的密钥材料有多少熵?你为什么要使用AES128以上的AES256? – CodesInChaos 2012-02-06 11:17:59

回答

3

如果您拥有的密钥资料是密码,则应使用PBKDF2。如果不是,那么采用密钥材料的SHA-256哈希值可能就足够了,后者将是256位。对于128位密钥,只需使用一半散列。

请注意,使用小于100位的密钥材料是非常不明智的。

0

AES256 总是使用256位密钥。如果您的密钥材料具有不同的长度,则可以使用散列函数的输出(例如SHA-256)来获取256位密钥。

但是,如果你的密钥材料的熵小于256位,这显然意味着你不会得到256位的安全性。一旦你的安全性显着低于128位,实际的安全性就会受损。

如果您的密钥材料是密码,请使用密钥派生函数(例如PBKDF2)获取密钥。这是故意慢,为了增加安全性,熵密码相对较低。