Java 使用keytool生成128位密钥
有没有办法使用Sun的keytool程序生成适合加密的128位密钥对?中可用的算法似乎不受支持,或者不允许密钥短于512位 密钥对将与ff一起使用。代码段:Java 使用keytool生成128位密钥,java,security,cryptography,bouncycastle,keytool,Java,Security,Cryptography,Bouncycastle,Keytool,有没有办法使用Sun的keytool程序生成适合加密的128位密钥对?中可用的算法似乎不受支持,或者不允许密钥短于512位 密钥对将与ff一起使用。代码段: Security.addProvider(new BouncyCastleProvider()); KeyStore keyStore = KeyStore.getInstance("PKCS12"); FileInputStream keyStoreSource = new FileInputStream("keystore");
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();
}
其中,输出是将保存加密数据的某个输出流,而输入是将读取明文数据的某个输入流。不能生成短于512位的密钥对是有意义的。公钥加密需要比对称密钥加密更长的密钥才能维持相同的安全级别。不建议将128位密钥对用于公钥加密。证书用于公钥加密,不包含对称分组密码AES-128的加密密钥。相反,公钥加密仅用于加密或协商128位AES密钥,其余对话使用AES
128位AES密钥不是证书,它只是来自加密强随机数生成器的128位,或者来自使用哈希算法(例如)的密码短语。如何获取这些位取决于您的应用程序。SSL/TLS必须协商一个随机密钥,但硬盘加密程序将从密码短语派生密钥。您只需要指定不同的存储类型
keytool-genseckey-alias check2-keyalg AES-keysize 128-storepass changeit-storetype JCEKS-keystore ks.jck
我想生成一个与AES-128一起使用的测试证书。那么,我是不是走错了方向?你能更详细地解释一下你希望完成什么吗?更新的问题和代码片段将在哪里使用生成的密钥对。更新的问题和代码片段将在哪里使用生成的密钥对。希望我已经澄清了所有的困惑。但是,是的,我是一个密码初学者P