Versão atual:

Erro ao decriptografar RSA vindo do banco de dados

Pessoal,

Preciso criptografar uma senha, salvá-la no BD e em outro momento capturar essa senha e descriptografá-la.

O problema é que no momento da descriptografia estou recebendo a seguinte exceção:

javax.crypto.BadPaddingException: Decryption error at sun.security.rsa.RSAPadding.unpadV15(Unknown Source) at sun.security.rsa.RSAPadding.unpad(Unknown Source) at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:363) at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:389) at javax.crypto.Cipher.doFinal(Cipher.java:2165) at secure.DecryptOTASS.decrypt(DecryptOTASS.java:84) at secure.DecryptOTASS.getUserandPass(DecryptOTASS.java:22) at main.ChecksExec.execCheck(ChecksExec.java:70) at main.MajorMain.main(MajorMain.java:27)

Segue abaixo o código que uso para criptografar:

public static byte[] encrypt(String text, PublicKey key) {
        byte[] cipherText = null;
        try {
            final Cipher cipher = Cipher.getInstance(KeyGenerator.ALGORITHM);
            //Encrypt plain text using a public key
            cipher.init(Cipher.ENCRYPT_MODE, key);
            cipherText = cipher.doFinal(text.getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return cipherText;
    }

E abaixo o código que uso para descriptografar:

private String decrypt(byte[] text) {
        final String PATH_PRIVATE_KEY = "C:\\Temp\\script result\\privateOTASS.key";
        byte[] decryptedPass = null;
        PrivateKey privateKey = null;
        ObjectInputStream inputStream = null;

        //Retrieve private key file
        try {
            inputStream = new ObjectInputStream(new FileInputStream(PATH_PRIVATE_KEY));
        } catch (FileNotFoundException e) {
            System.out.println("OTASS private key file not found.");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("Error while opening OTASS private key file.");
            e.printStackTrace();
        }


        //Read the private key file
        try {
            privateKey = (PrivateKey) inputStream.readObject();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("Error while reading OTASS private key file.");
            e.printStackTrace();
        }

        //Decrypt the password
        try {
            final Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.DECRYPT_MODE, privateKey);
            decryptedPass = cipher.doFinal(text);
        } catch (Exception e) {
            System.out.println("Error while decrypting OTASS password.");
            e.printStackTrace();
        }

        return new String(decryptedPass);
    }

Acredito que o problema é no encoding pelo qual os caracteres passam no banco de dados. Li várias threads no StackOverflow sobre este problema, mas nenhuma chegou a ser conclusiva.

Preciso padronizar o encoding entre minha aplicação e o banco de dados?

Estou armazendo a String criptografada em um campo VARCHAR na minha tabela. Será que devo mudar o tipo do campo e armazenar isso como bytes?

Obrigado pela atenção!

Versão(1):

Ver a versão formatada

Erro ao decriptografar RSA vindo do banco de dados

Comentário

new question