使用keytool生成128位密钥

7
有没有一种使用Sun的keytool程序生成适用于加密的128位密钥对的方法?似乎在http://java.sun.com/javase/6/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator中可用的算法要么不受支持,要么不允许使用短于512位的密钥。
密钥对将与以下代码片段一起使用:
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),加密后的数据将会被保存在其中,输入(input)是一个输入流(InputStream),明文数据将从其中读取。

3个回答

6

您只需要指定不同的存储类型。

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


2
证书用于公钥密码学,不包含对称块密码AES-128的加密密钥。相反,公钥密码学仅用于加密或协商128位AES密钥,其余的会话使用AES。
128位AES密钥不是证书,它只是来自加密强度随机数生成器的128位,或者使用哈希算法(如PBKDF2)从口令派生而来。如何获得这些比特取决于您的应用程序。SSL/TLS必须协商一个随机密钥,但硬盘加密程序将从口令派生密钥。

更新了问题,并附上了代码片段,其中将使用生成的密钥对。希望我已经消除了任何困惑。但是,是的,我是一个加密初学者。 :P - Chry Cheng

0

生成短于512位的密钥对是没有意义的。公钥密码学需要比对称密钥密码学更长的密钥才能维持相同级别的安全性。不建议使用128位密钥对进行公钥密码学。


我想生成一个测试证书来与AES-128一起使用。那我现在走的路是错误的吗? - Chry Cheng
1
你能详细解释一下你想要实现什么吗? - Sani Huttunen
更新了问题,附带代码片段,其中将使用生成的密钥对。 - Chry Cheng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接