1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

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!

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags criptografia java mysql ou faça a sua própria pergunta.