我的 Java KeyStore (.jks) 文件中有一个 PrivateKeyEntry 条目。我能够从这个 .jks 文件构建一个 KeyStore
实例,如下所示:
KeyStore keystore = KeyStore.getInstance("JKS");
keystore.load(keystoreFileInputStream, passwordCharArray);
我能够从 keystore
中提取 PrivateKey
和 PublicKey
实例,如下所示:
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
最佳答案
我听从了@Cruncher 的建议并尝试了一个不同的 Java KeyStore (.jks) 文件,看起来这确实是我正在处理的 .jks 文件而不是代码的问题。
我使用 keytool -genkey ...
命令创建了一个新的 .jks 文件,并使用包含的 key 进行加密/解密,返回预期结果。
谢谢大家的指点。欣赏它。
关于java - 加密后解密不返回原始字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22661757/