Декодированный файл с RSA с закрытым ключом - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть приложение клиент / сервер, которое шифрует файл на стороне клиента следующим кодом:

 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)

Подумайте, пожалуйста, и спасибо за ответы

...