2014-04-30 18 views
7

Tôi nhận java.security.InvalidKeyException: Invalid AES key length: 128 bytes trên đường dây của tôiĐộ dài khóa AES không hợp lệ: 128 byte?

CIPHER.init(Cipher.ENCRYPT_MODE, keySpec); 

với CIPHER là

Cipher CIPHER = Cipher.getInstance("AES"); 

và keySpec

SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); 

mà quan trọng là một byte[] chiều dài 128 Tôi đột phá vòng vây một Diffie-Hellman trao đổi khóa (mặc dù nó không quan trọng nơi tôi đã nhận nó, phải không?), key là hoàn toàn đầy với các byte nonzero

Tại sao Cipher.init(...) phàn nàn rằng khóa có độ dài sai? This webpage nêu rõ rằng khóa có độ dài 128 được hỗ trợ.

Tôi đang xem gì?

+5

Tôi tin rằng bạn muốn khóa 128 bit - không phải 128 byte? –

+2

oops rightp derp. Vui lòng đặt câu trả lời này là một câu trả lời, vì vậy tôi có thể chấp nhận câu trả lời và có thể là gợi ý để sử dụng mã hóa nào với 128 byte khóa – vrwim

+0

Ok. Đăng câu trả lời ngay bây giờ –

Trả lời

7

Tôi nghĩ bạn cần khóa 128 bit ở đây cho thuật toán AES - không phải 128 byte. Để chuyển đổi khóa dài của bạn thành độ dài cần thiết, bạn có thể thử một cái gì đó như chức năng dẫn xuất khóa dựa trên mật khẩu. Xem PBKDF2 chẳng hạn.

+3

PBKDF2 là một chút quá mức cần thiết cho vật liệu entropy cao như các yếu tố nhóm Diffie-Hellman. Xem https://stackoverflow.com/questions/23167936/generating-aes-key-after-ecdh để biết thêm thông tin về @vrwim – Perseids

+0

Tôi đã đọc một số thông tin về PBKDF2, nhưng điều đó dường như là cho các băm mật khẩu, vì vậy chúng khó khăn hơn để bị nứt với các bảng cầu vồng. Tôi có bảo mật từ trao đổi khóa DH của tôi phải không? Tôi nghĩ rằng tôi chỉ cần một hàm băm để băm chìa khóa để một cái gì đó là chiều dài phù hợp? – vrwim

+2

@vrwim Có, điều đó là đủ, hãy kiểm tra [Câu hỏi này] (http://crypto.stackexchange.com/questions/15673/security-of-kdf1-and-kdf2-hash-based-kdfs). KDF1 và 2 không nhiều hơn kết quả băm. –

1

Thuật toán AES cho phép độ dài khóa 128, 192 hoặc 256 bit. là 16, 24 hoặc 32 byte. chiều dài khóa của bạn phải là 16, 24 hoặc 32 byte.

Các vấn đề liên quan