我的Java KeyStore(.jks)文件中有一个PrivateKeyEntry条目。我能够从这个.jks文件构建一个KeyStore
实例,如下所示:
KeyStore keystore = KeyStore.getInstance("JKS");
keystore.load(keystoreFileInputStream, passwordCharArray);
我可以从PrivateKey
中提取PublicKey
和keystore
个实例,如下所示:
PrivateKey privateKey = (PrivateKey) keystore.getKey(alias, passwordCharArray);
PublicKey publicKey = keystore.getCertificate(alias).getPublicKey();
我按如下方式加密字节数组inputBytes
:
Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedBytes = cipher.doFinal(inputBytes, 0, 128);
我反过来解密encryptedBytes
如下:
Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedBytes = cipher.doFinal(encryptedBytes, 0, 128);
但是,decryptedBytes
中的字节与inputBytes
中的字节明显不同。它们应该是一样的。我做错了什么?!
如果它很重要,我使用KeyTool通过Java KeyStore文件创建。具体来说,以下命令:
keytool -genkey -alias my_alias -keyalg RSA -keystore my_keystore.jks -keysize 1024
答案 0 :(得分:1)
我遵循了@ Cruncher的建议并尝试了一个不同的Java KeyStore(.jks)文件,看起来它确实是我正在使用的.jks文件而不是代码的问题。
我使用keytool -genkey ...
命令创建了一个新的.jks文件,并使用包含的键加密/解密返回预期的结果。
感谢大家指点。欣赏它。