У меня есть приложение клиент / сервер, которое шифрует файл на стороне клиента следующим кодом:
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)
Подумайте, пожалуйста, и спасибо за ответы