2010-04-06 28 views
7

Kiểm tra RSA để mã hóa khóa AES, I realized rằng RSA chỉ có 1 khối có kích thước giới hạn (được lập trình bởi người lập trình) lưu trữ khóa được mã hóa. Câu hỏi đặt ra là, khi tôi sử dụng:Kích thước khóa AES trong Java

KeyGenerator.getInstance("AES").generateKey() 

các phím AES sẽ có một kích thước không đổi trong mỗi máy tính và JVM thực hiện?

Trả lời

11

Có phương pháp init trong Trình tạo khóa cho phép bạn chỉ định số bit.

KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); 
keyGenerator.init(128); 
SecretKey key = keyGenerator.generateKey(); 

Điều đó có làm được những gì bạn cần không?

Mặc định appears là 128 bit, nhưng tôi sẽ không giả định rằng tất cả JVM đều sử dụng cùng một giá trị mặc định hoặc nó sẽ luôn là mặc định.

+0

Tôi đồng ý không phụ thuộc vào giá trị mặc định. (Các giá trị mặc định Java khác thay đổi theo thời gian.) Ngoài ra, cần lưu ý rằng các giá trị hợp lệ duy nhất là 128, 192 hoặc 256 bit cho '.init()', và 192 và 256 có thể thậm chí không có sẵn ... có thể dẫn đến một số niềm vui triển khai đau đớn. –

2

Suns Java Cryptography Extension documentation nói rằng nhiều kích thước khóa được hỗ trợ cho khóa AES và không cung cấp bất kỳ thông tin nào về kích thước mặc định.

Kích thước tối đa của các khóa cũng có thể khác nhau tùy thuộc vào các tập tin pháp lý được sử dụng bởi các phiên bản khác nhau của Suns JVM.

+0

điều này là xấu .. vì vậy tôi không thể chỉ cần đặt một kích thước và beleave nó sẽ làm việc tốt ở khắp mọi nơi .. –

+0

kích thước cũng có thể được giới hạn tùy thuộc vào các thiết lập pháp lý. – BenM

+0

có vẻ như AES luôn có thể là 128 bit (16 byte) –

0

KeyGenerator có một số phương pháp init(); bạn nên gọi một trong số chúng trước khi tạo một khóa. Javadoc cho KeyGenerator chỉ định rằng trong trường hợp bạn không gọi một trong các phương pháp init(), thì "mỗi nhà cung cấp phải cung cấp (và tài liệu) một khởi tạo mặc định."

Vì vậy, đây là nhà cung cấp cụ thể. Vì bạn khởi tạo trình tạo khóa với tên thuật toán "AES", người ta có thể giả định rằng bạn sẽ nhận được khóa có kích thước phù hợp với AES, tức là 128, 192 hoặc 256 bit (tương ứng là 16, 24 và 32 byte). Nhưng cái mà bạn nhận được là tùy thuộc vào nhà cung cấp thực tế, điều này có thể phụ thuộc vào JVM và có thể cấu hình của nó.

0

https://docs.oracle.com/javase/7/docs/api/javax/crypto/Cipher.html

Mỗi thực hiện của nền tảng Java là cần thiết để hỗ trợ các biến đổi Cipher tiêu chuẩn sau đây với keysizes trong ngoặc đơn:

AES/CBC/NoPadding (128) 
AES/CBC/PKCS5Padding (128) 
AES/ECB/NoPadding (128) 
AES/ECB/PKCS5Padding (128) 
DES/CBC/NoPadding (56) 
DES/CBC/PKCS5Padding (56) 
DES/ECB/NoPadding (56) 
DES/ECB/PKCS5Padding (56) 
DESede/CBC/NoPadding (168) 
DESede/CBC/PKCS5Padding (168) 
DESede/ECB/NoPadding (168) 
DESede/ECB/PKCS5Padding (168) 
RSA/ECB/PKCS1Padding (1024, 2048) 
RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048) 
RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048) 
Các vấn đề liên quan