Android Encryption and Encryption

Asked

Viewed 1,252 times

3

I’m trying to learn how to use encryption to encrypt and decrypt messages.

I’m with a class called Encripta which has the methods, the encryption works perfectly.

My method of deciphering cryptography decrypt, returns the following log:

"V/Decrypted: android.support.v7.widget.Appcompatedittext{41766b38 VFED.. CL .F...... 32,344-688,435 #7f0c0052 app:id/txtMensage}"

I’ll post my class Main and the class Encripta.

If you can tell me what I’m missing, I’m waiting( I took the code here from the same stack, and I’m using the base in the project).

Encryption

package gastecnologia.com.br.ltcrypt;

import android.util.Base64;

import java.security.MessageDigest;
import java.security.spec.AlgorithmParameterSpec;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

/**
 * Created by thiago.goncalves on 22/02/2016.
 */
public class Encripta {

    private final Cipher cipher;
    private final SecretKeySpec key;
    private AlgorithmParameterSpec spec;
    public static final String SEED_16_CHARACTER = "U1MjU1M0FDOUZ.Qz";

    public Encripta() throws Exception {
        // hash password with SHA-256 and crop the output to 128-bit for key
        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        digest.update(SEED_16_CHARACTER.getBytes("UTF-8"));
        byte[] keyBytes = new byte[32];
        System.arraycopy(digest.digest(), 0, keyBytes, 0, keyBytes.length);

        cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
        key = new SecretKeySpec(keyBytes, "AES");
        spec = getIV();
    }

    public AlgorithmParameterSpec getIV() {
        byte[] iv = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
        IvParameterSpec ivParameterSpec;
        ivParameterSpec = new IvParameterSpec(iv);

        return ivParameterSpec;
    }

    public String encrypt(String plainText) throws Exception {
        cipher.init(Cipher.ENCRYPT_MODE, key, spec);
        byte[] encrypted = cipher.doFinal(plainText.getBytes("UTF-8"));
        String encryptedText = new String(Base64.encode(encrypted,
                Base64.DEFAULT), "UTF-8");

        return encryptedText;
    }

    public String decrypt(String cryptedText) throws Exception {
        cipher.init(Cipher.DECRYPT_MODE, key, spec);
        byte[] bytes = Base64.decode(cryptedText, Base64.DEFAULT);
        byte[] decrypted = cipher.doFinal(bytes);
        String decryptedText = new String(decrypted, "UTF-8");

        return decryptedText;
    }

}
package gastecnologia.com.br.ltcrypt;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    String mensagemCriptografada;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

            Button btnCodificar     = (Button) findViewById(R.id.btnCodificar);
            Button btnDecrifrar     = (Button) findViewById(R.id.btnDecifrar);
            Button btnLimpar        = (Button) findViewById(R.id.btnLimpar);
            Button btnCopiar        = (Button) findViewById(R.id.btnCopiar);
            final EditText txtMensagem    = (EditText) findViewById(R.id.txtMensagem);

            btnCodificar.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        Log.v("Btn codificar", "ok");
                        try {

                            Encripta encripta = new Encripta();
                            String codigo =  encripta.encrypt(txtMensagem.toString());
                            Log.v("Criptografia",codigo);
                            txtMensagem.setText(codigo);
                            mensagemCriptografada = codigo;


                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                    }
            });


            btnDecrifrar.setOnClickListener(new View.OnClickListener() {
                @Override
                    public void onClick(View v) {
                        Log.v("Btn Decifrar","ok");

                        try {

                            Encripta encripta = new Encripta();
                           // encripta.getIV();
                            String codigoDecifrado =  encripta.decrypt(mensagemCriptografada.toString());

                            Log.v("Mmg a ser Decifrada",codigoDecifrado);

                            Log.v("Decifrado",codigoDecifrado);



                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                    }
            });

           btnLimpar.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {
                   txtMensagem.setText("");
               }
           });



    }




}

1 answer

5


Come on:

I believe there are no errors in the Encrypt methods, but there is when you take the value of the screen:

String codigo =  encripta.encrypt(txtMensagem.toString());

Actually you are passing the object reference, not its content:

The right thing would be :

 String codigo =  encripta.encrypt(txtMensagem.getText().toString());
  • Show Too Thiago Luiz, I ended up vacillating on a simple thing, thanks a lot for the help. It was total learning for me ... Vlw same!

  • Get used to it! It’s always like this, sometimes we pay attention to the most complicated and forget the simple! It happens to everyone ! You can be sure! =)

  • Show, very good! Thank you!

  • Thiago Luiz, come again see if you can help me... Since yesterday I’m trying to put the key as fixed instead of generating it with the Secretkeyspec... Because the app it cryptographic but the intention was to be able to decrypt and vice versa on another phone and tb when opening and closing this own app. I believe that as the key ta being generated randomly or something like that, he can’t decipher when I close and open the app and paste the string q he had set before he closed and reopened.

  • For other users' research purposes, could you create a new question? So more people will also help! Thanks!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.