2012-02-06 177 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)獲取密鑰。這是故意慢,爲了增加安全性,熵密碼相對較低。