2009-05-19 139 views
7

有没有办法生成适合使用Sun的keytool程序进行加密的128位密钥对?似乎http://java.sun.com/javase/6/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator中的算法不支持或不允许短于512位的密钥。使用keytool生成128位密钥

密钥对将与ff一起使用。代码段:

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(); 
} 

其中输出是一些为OutputStream其中的加密数据将被保存,输入是一些的InputStream其中明文数据将被读取。

回答

0

这将是有意义的,短于512位密钥对不能生成。与对称密钥密码术相比,公钥密码系统需要更长的密钥才能维持相同的安全级别。公钥密码不建议使用128位密钥对。

+0

我一直在寻找生成测试证书的AES-128使用。那么我错了吗? – 2009-05-19 10:10:10

+1

你能否详细解释一下你想完成的事情? – 2009-05-19 11:39:26

2

证书用于公钥加密,并且不包含对称分组密码AES-128的加密密钥。相反,公钥密码术仅用于加密或协商128位AES密钥,而对话的其余部分使用AES。

128位AES密钥不是证书,它只是来自密码强的随机数生成器的128位或使用散列算法(如PBKDF2)的密码派生的密钥。你如何得到这些位取决于你的应用程序。 SSL/TLS必须协商一个随机密钥,但硬盘加密程序会从密码中派生密钥。

5

你只需要指定不同的storetype

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