java - 带有私钥的 RSA 解码文件
问题描述
我有一个应用程序客户端/服务器,它使用以下代码在客户端加密文件:
private static byte[] cifrador(byte[] file) throws Exception {
String provider = "SunJCE";
String algorithm = "RSA";
String transfor = "/ECB/PKCS1Padding";
/************************************************************
* Xerar e almacear a clave
************************************************************/
// Obter a clave publica do trustStore
KeyStore ks = KeyStore.getInstance("JCEKS");
ks.load(new FileInputStream(pathCliente + TrustStore), password.toCharArray());
PublicKey publicKeyServer = ks.getCertificate("serverkey").getPublicKey();
Cipher cipher = Cipher.getInstance(algorithm + transform);
cipher.init(Cipher.ENCRYPT_MODE, publicKeyServer);
byte[] encodedFile = cipher.update(file);
return encodedFile;
}
在此之后,我通过 SSL 连接将编码的文件发送到服务器,服务器尝试使用下一个代码对其进行编码:
public static byte[] descifrador(byte[] encodedFile) throws Exception {
String provider = "SunJCE";
String algorithm = "RSA";
String transform = "/ECB/PKCS1Padding";
char[] key_password = password.toCharArray();
KeyStore ks = KeyStore.getInstance("JCEKS");
ks.load(new FileInputStream(path + KeyStore), key_password);
KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry)
ks.getEntry("serverkey",
new KeyStore.PasswordProtection(key_password));
PrivateKey privateKeyServer = (PrivateKey) ks.getKey("serverkey", key_password);
Cipher decoder = Cipher.getInstance(algorithm + transform);
decoder.init(Cipher.DECRYPT_MODE, privateKeyServer);
// byte[] decodedFile = decoder.update(encodedFile);
byte[] decodedFile = decoder.doFinal(encodedFile);
return decodedFile;
}
使用decoder.update(encodedFile)
我得到的方法Null
和使用该方法decoder.doFinal(encodedFile)
我得到下一个错误:
javax.crypto.BadPaddingException: Decryption error
at java.base/sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:382)
at java.base/sun.security.rsa.RSAPadding.unpad(RSAPadding.java:294)
at java.base/com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:364)
at java.base/com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:390)
at java.base/javax.crypto.Cipher.doFinal(Cipher.java:2191)
请提供一些想法并感谢您的回答
解决方案
推荐阅读
- flutter - “IconData”类型不是“Widget”类型的子类型
- operating-system - 访问 ChromeOS 上的系统级功能
- python - 在所有列表中查找列表列表的最小值
- c++ - VS C++ 重载作为临时对象引用的函数
- tensorflow - 具有向量输入和向量输出的 DQN 代理
- python - 在 DAG 中添加标签
- json - 如何在 JSON 项中将值分配为具有新值的键?
- c# - 实体类型 EF Migration 中有多个导航
- javascript - 如何在画布上设置鼠标滚轮缩小限制?
- java - 使用 WorkManager 触发推送通知有一些延迟