Java 使用keytool生成128位密钥

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");

有没有办法使用Sun的keytool程序生成适合加密的128位密钥对?中可用的算法似乎不受支持,或者不允许密钥短于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();
}

其中,输出是将保存加密数据的某个输出流,而输入是将读取明文数据的某个输入流。

不能生成短于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