Tôi đang cố mã hóa chuỗi trên Android bằng AES. Khóa đối xứng được xác định trước đó với thuật toán Diffie-Hellman và có vẻ là ok (Độ dài khóa là 128 bit, xem bên dưới).
Tuy nhiên, tôi nhận được một Mã InvalidKeyException: "Key length not 128/192/256 bits.
"Mã hóa AES: InvalidKeyException: Độ dài khóa không 128/192/256 bit
:
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();
}
Bộ luật nêu trên dẫn đến kết quả như sau:
_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_
Sau đó, tôi nhận được InvalidKeyException: Key length not 128/192/256 bits.
Nhưng như bạn có thể nhìn thấy , Khóa Bí mật có độ dài 128 bit!
Bất kỳ ý tưởng nào?
1 đánh bại tôi vào nó. @Peter: Nơi duy nhất bạn sẽ tìm thấy một tài sản Length đại diện cho số bit sẽ là một bộ sưu tập bit chuyên dụng. 99,9% thời gian sẽ là số ký tự hoặc byte. –
Hmm, bạn rõ ràng là đúng. Vì vậy, việc sử dụng KeyAgreement.generateSecret ("AES") trả về một khóa có độ dài 128 byte. Rõ ràng, đó là quá nhiều ... Làm thế nào tôi có thể có được một chìa khóa với chúng ta hãy nói 256 Bit? Cảm ơn – Peter
Nhân tiện: Android sử dụng BouncyCastle làm Nhà cung cấp Bảo mật ... – Peter