AESencryption:InvalidKeyException:密钥长度不是128/192/256位

我想用AESencryptionAndroid上的string。 对称密钥先前是用Diffie-Hellmanalgorithm确定的,似乎是确定的(密钥长度是128位,见下文)。
不过,我得到一个InvalidKeyException: "Key length not 128/192/256 bits.

码:

 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位!

有任何想法吗?

Related of "AESencryption:InvalidKeyException:密钥长度不是128/192/256位"

您生成的密钥是128 字节 ,而不是128 。 “密钥长度”应为16。

这个exception基本上是由于你用来encryption的密钥的长度而发生的。如果你使用的是AESencryption,那么字符数必须是128/192/256位。 例如,您可以使用16个字符,24个字符或32个字符的键。

 String encrypted_data=AES.encrypt("HELLO","ASDFGHJKLASDFGHJ"); 

希望这个帮助…