我试图使用AES加密Android上的字符串。对称密钥先前是用Diffie-Hellman算法确定的,似乎没问题(密钥长度是128位,见下文)。

不过,我得到一个InvalidKeyException: "Key length not 128/192/256 bits.“AES加密:InvalidKeyException:密钥长度不是128/192/256位

代码:

KeyAgreement keyAgree = KeyAgreement.getInstance("DH", "BC");

keyAgree.init(this.smartphonePrivKey);

keyAgree.doPhase(serverPubKey, true);

SecretKey key = keyAgree.generateSecret("AES");

System.out.println("Key Length: " + key.getEncoded().length);

System.out.println("Key Algorithm: "+ key.getAlgorithm());

System.out.println("Key Format: "+ key.getFormat());

byte[] encrypted = null;

Cipher cipher;

try {

cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");

System.out.println("Allowed Key Length: "

+ cipher.getMaxAllowedKeyLength("AES"));

cipher.init(Cipher.ENCRYPT_MODE, key);

encrypted = cipher.doFinal("YEAH".getBytes("UTF8"));

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

} catch (NoSuchPaddingException e) {

e.printStackTrace();

} catch (InvalidKeyException e) {

e.printStackTrace();

} catch (IllegalBlockSizeException e) {

e.printStackTrace();

} catch (BadPaddingException e) {

e.printStackTrace();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

上面的代码导致了以下的输出:

_12-10 20:24:53.119: INFO/System.out(757): Key Length: 128_

_12-10 20:24:53.119: INFO/System.out(757): Key Algorithm: AES_

_12-10 20:24:53.119: INFO/System.out(757): Key Format: RAW_

_12-10 20:24:53.470: INFO/System.out(757): Allowed Key Length: 2147483647_

在那之后,我得到InvalidKeyException: Key length not 128/192/256 bits.但正如你所看到的,SecretKey的长度为128位!

任何想法?

2010-12-10

Peter

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐