2009-05-19 68 views
7

Có cách nào để tạo cặp khóa 128 bit phù hợp để mã hóa bằng chương trình keytool của Sun không? Dường như các thuật toán có sẵn trong http://java.sun.com/javase/6/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator không được hỗ trợ hoặc không cho phép các khóa ngắn hơn 512 bit.Tạo khóa 128 bit bằng công cụ khóa

Cặp khóa sẽ được sử dụng với ff. đoạn mã:

Security.addProvider(new BouncyCastleProvider()); 

KeyStore keyStore = KeyStore.getInstance("PKCS12"); 

FileInputStream keyStoreSource = new FileInputStream("keystore"); 

try { 
    keyStore.load(keyStoreSource, "password".toCharArray()); 
} finally { 
    keyStoreSource.close(); 
} 

String alias = (String) keyStore.aliases().nextElement(); 
PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, "password".toCharArray()); 
X509Certificate certificate = (X509Certificate) keyStore.getCertificate(alias); 

CMSEnvelopedDataStreamGenerator generator = new CMSEnvelopedDataStreamGenerator(); 

generator.addKeyTransRecipient(certificate); 

OutputStream output2 = generator.open(output, CMSEnvelopedDataGenerator.AES128_CBC, BouncyCastleProvider.PROVIDER_NAME); 

try { 
    IOUtils.copy(input, output2); 
} finally { 
    output2.close(); 
    output.close(); 
} 

trong đó đầu ra là một số OutputStream nơi dữ liệu được mã hóa sẽ được lưu và nhập vào là một số InputStream nơi dữ liệu văn bản thuần sẽ được đọc.

Trả lời

0

Sẽ có nghĩa là không thể tạo cặp khóa ngắn hơn 512 bit. Mật mã khóa công khai cần một khóa dài hơn mật mã khóa đối xứng để duy trì cùng một mức độ bảo mật. Không nên sử dụng cặp khóa 128 bit cho mã hóa khóa công khai.

+0

tôi đang tìm kiếm để tạo ra một cert thử nghiệm để sử dụng với AES-128. Tôi có đi sai đường không? –

+1

Bạn có thể giải thích chi tiết hơn một chút về những gì bạn muốn thực hiện không? –

+0

Đã cập nhật câu hỏi với đoạn mã mà cặp khóa được tạo sẽ được sử dụng. –

2

Chứng chỉ được sử dụng cho mã hóa khóa công khai và không chứa khóa mã hóa cho mật mã khối đối xứng AES-128. Thay vào đó, mật mã khoá công khai chỉ được sử dụng để mã hóa hoặc thương lượng khóa AES 128 bit và phần còn lại của cuộc hội thoại sử dụng AES.

Khóa AES 128 bit không phải là chứng chỉ, chỉ 128 bit từ trình tạo số ngẫu nhiên mã hóa mạnh hoặc được lấy từ cụm mật khẩu sử dụng thuật toán băm như PBKDF2. Làm thế nào bạn nhận được các bit này sẽ phụ thuộc vào ứng dụng của bạn. SSL/TLS phải thương lượng một khóa ngẫu nhiên, nhưng một chương trình mã hóa đĩa cứng sẽ lấy được khóa từ một cụm mật khẩu.

+0

Đã cập nhật câu hỏi với đoạn mã mà cặp khóa được tạo sẽ được sử dụng. Hy vọng rằng, tôi đã xóa bỏ bất kỳ sự nhầm lẫn nào. Nhưng, vâng, tôi là người mới bắt đầu tiền mật. : P –

5

Bạn chỉ cần xác định storetype khác nhau

keytool -genseckey -alias check2 -keyalg AES -keysize 128 -storepass changeit -storetype JCEKS -keystore ks.jck

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