使用keytool生成128位密钥

时间:2009-05-19 08:56:02

标签: java security cryptography bouncycastle keytool

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

密钥对将与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();
}

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

3 个答案:

答案 0 :(得分:5)

您只需指定不同的商店类型

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

有意义的是,不能生成短于512位的密钥对。公钥加密需要比对称密钥加密更长的密钥来维持相同的安全级别。建议不要将128位密钥对用于公钥加密。