This post is about creating an android app to encrypt and decrypt text.
Step 1: Create a new project with name Encryption.
Step 2: Open res/layout/xml (or) main.xml and add following code. Here we add an EditText, two Buttons, and two TextViews.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ScrollView android:id="@+id/vscroll1" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="8dp"> <LinearLayout android:id="@+id/linear1" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="8dp" android:orientation="vertical"> <EditText android:id="@+id/edittext1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="8dp" android:textSize="16sp" android:textColor="#000000" android:hint="Edit Text" android:textColorHint="#607D8B"/> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="8dp" android:text="Encrypt" android:textSize="20sp" android:textColor="#000000"/> <TextView android:id="@+id/textview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="8dp" android:text="TextView" android:textSize="16sp" android:textColor="#000000"/> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="8dp" android:text="Decrypt" android:textSize="18sp" android:textColor="#000000"/> <TextView android:id="@+id/textview2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="8dp" android:text="TextView" android:textSize="16sp" android:textColor="#000000"/> </LinearLayout> </ScrollView> </LinearLayout>
Step 3: Open app/src/main/java/package and open MainActivity.java. Add following code in it.
package com.my.newproject19; import android.app.*; import android.os.*; import android.view.*; import android.view.View.*; import android.widget.*; import android.content.*; import android.text.*; import javax.crypto.*; import java.security.*; import javax.crypto.spec.*; public class MainActivity extends Activity { private ScrollView vscroll1; private LinearLayout linear1; private EditText edittext1; private Button button1; private TextView textview1; private Button button2; private TextView textview2; KeyGenerator keyGenerator; SecretKey secretKey; byte[] secretKeyen; String strSecretKey; byte[] IV = new byte[16]; byte[] cipherText; @Override protected void onCreate(Bundle _savedInstanceState) { super.onCreate(_savedInstanceState); setContentView(R.layout.main); initialize(_savedInstanceState); } private void initialize(Bundle _savedInstanceState) { vscroll1 = (ScrollView) findViewById(R.id.vscroll1); linear1 = (LinearLayout) findViewById(R.id.linear1); edittext1 = (EditText) findViewById(R.id.edittext1); button1 = (Button) findViewById(R.id.button1); textview1 = (TextView) findViewById(R.id.textview1); button2 = (Button) findViewById(R.id.button2); textview2 = (TextView) findViewById(R.id.textview2); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View _view) { button2.setVisibility(View.VISIBLE); textview2.setVisibility(View.VISIBLE); try { keyGenerator = javax.crypto.KeyGenerator.getInstance("AES"); keyGenerator.init(256); secretKey = keyGenerator.generateKey(); secretKeyen=secretKey.getEncoded(); cipherText = encrypt(edittext1.getText().toString().getBytes(), secretKey, IV); textview1.setText(android.util.Base64.encodeToString(cipherText, android.util.Base64.DEFAULT)); } catch (NoSuchAlgorithmException e){ showMessage(e.toString()); } catch (Exception e){ showMessage(e.toString()); } } }); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View _view) { try { SecretKey originalSecretKey = new SecretKeySpec(secretKeyen, 0, secretKeyen.length, "AES"); String decryptedText = decrypt(cipherText, originalSecretKey, IV); textview2.setText(decryptedText); } catch (Exception e) { showMessage(e.toString()); } } }); button2.setVisibility(View.GONE); textview2.setVisibility(View.GONE); } public static byte[] encrypt(byte[] plaintext, SecretKey key, byte[] IV) throws Exception{ Cipher cipher = Cipher.getInstance("AES"); SecretKeySpec keySpec = new SecretKeySpec(key.getEncoded(), "AES"); IvParameterSpec ivSpec = new IvParameterSpec(IV); cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); byte[] cipherText = cipher.doFinal(plaintext); return cipherText; } public static String decrypt(byte[] cipherText, SecretKey key, byte[] IV) throws Exception{ Cipher cipher = Cipher.getInstance("AES"); SecretKeySpec keySpec = new SecretKeySpec(key.getEncoded(), "AES"); IvParameterSpec ivSpec = new IvParameterSpec(IV); cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec); byte[] decryptedText = cipher.doFinal(cipherText); return new String(decryptedText); } public void showMessage(String _s) { Toast.makeText(getApplicationContext(), _s, Toast.LENGTH_SHORT).show(); } }
Output:
Now run the app. Enter text in EditText field and click on encrypt button. The textview1 will display the encrypted text. Now click on decrypt button. The textview2 will show the decrypted text, which is same as text in EditText field.