java - 加密后解密不返回原始字节数组?

标签 java encryption rsa keystore keytool

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

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

我能够从 keystore 中提取 PrivateKeyPublicKey 实例,如下所示:

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/

相关文章:

java - 验证发生时 + 符号从 xml 中删除

带有自定义控件的 JavaFX8 TableView

java - 弹出文本字段 Java

c# - 使用 Bouncy CaSTLe AES/CBC/PKCS7 加密字符串

c - 打开SSL : What does RSA n e d p q parameters represent?

java - 使用 gwt-crypto 库通过 Google App Engine 在 Google Web Toolkit 应用程序上生成客户端 RSA key 对

java - java中的线程安全和实例

python-3.x - python解密代码中pow(a,b,n)函数的反函数

PHP:Mcrypt - 哪种模式?

batch-file - 带延迟变量扩展的批处理文件 - URL 编码 - 等号 - RSA token 转换器