加密后跟解密不会返回原始字节数组?

时间:2014-03-26 12:57:43

标签: java encryption rsa keystore keytool

我的Java KeyStore(.jks)文件中有一个PrivateKeyEntry条目。我能够从这个.jks文件构建一个KeyStore实例,如下所示:

KeyStore keystore = KeyStore.getInstance("JKS");
keystore.load(keystoreFileInputStream, passwordCharArray);

我可以从PrivateKey中提取PublicKeykeystore个实例,如下所示:

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

1 个答案:

答案 0 :(得分:1)

我遵循了@ Cruncher的建议并尝试了一个不同的Java KeyStore(.jks)文件,看起来它确实是我正在使用的.jks文件而不是代码的问题。

我使用keytool -genkey ...命令创建了一个新的.jks文件,并使用包含的键加密/解密返回预期的结果。

感谢大家指点。欣赏它。