Android Example for encrypt and decrypt using AES Algorithms
Below the example for how to encrypt and decrypt the values Using AES Algorithms. Make our data store in secure.
Screen Shot
AESHelper class
Below the example for how to encrypt and decrypt the values Using AES Algorithms. Make our data store in secure.
Screen Shot
AESHelper class
package
com.example.encription;
import
java.security.SecureRandom;
import javax.crypto.Cipher;
import
javax.crypto.KeyGenerator;
import
javax.crypto.SecretKey;
import
javax.crypto.spec.SecretKeySpec;
public class AESHelper {
public static String
encrypt(String seed, String cleartext) throws Exception {
byte[] rawKey = getRawKey(seed.getBytes());
byte[] result = encrypt(rawKey,
cleartext.getBytes());
return toHex(result);
}
public static String
decrypt(String seed, String encrypted) throws Exception {
byte[] rawKey = getRawKey(seed.getBytes());
byte[] enc = toByte(encrypted);
byte[] result = decrypt(rawKey,
enc);
return new String(result);
}
private static byte[] getRawKey(byte[] seed) throws Exception {
KeyGenerator kgen =
KeyGenerator.getInstance("AES");
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
sr.setSeed(seed);
kgen.init(128, sr); // 192 and 256 bits
may not be available
SecretKey skey =
kgen.generateKey();
byte[] raw =
skey.getEncoded();
return raw;
}
private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted =
cipher.doFinal(clear);
return encrypted;
}
private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] decrypted =
cipher.doFinal(encrypted);
return decrypted;
}
public static String toHex(String
txt) {
return toHex(txt.getBytes());
}
public static String
fromHex(String hex) {
return new String(toByte(hex));
}
public static byte[] toByte(String
hexString) {
int len =
hexString.length()/2;
byte[] result = new byte[len];
for (int i = 0; i < len;
i++)
result[i] = Integer.valueOf(hexString.substring(2*i,
2*i+2), 16).byteValue();
return result;
}
public static String toHex(byte[] buf) {
if (buf == null)
return "";
StringBuffer result = new StringBuffer(2*buf.length);
for (int i = 0; i < buf.length; i++) {
appendHex(result,
buf[i]);
}
return result.toString();
}
private final static String HEX = "0123456789ABCDEF";
private static void
appendHex(StringBuffer sb, byte b) {
sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f));
}
}
Activity Source Code
package
com.example.encription;
import android.os.Bundle;
import
android.app.Activity;
import android.view.Menu;
import
android.widget.TextView;
import android.widget.Toast;
/***
*
* @author vijay
*
*/
public class MainActivity extends Activity {
String
seedValue = "This Is
MySecure";
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
String normalText = "VIJAY";
String normalTextEnc;
try {
normalTextEnc = AESHelper.encrypt(seedValue, normalText);
String normalTextDec = AESHelper.decrypt(seedValue, normalTextEnc);
TextView txe = new TextView(this);
txe.setTextSize(14);
txe.setText("Normal Text
::"+normalText
+"
\n Encrypted Value :: "+normalTextEnc +" \n Decrypted value :: "+normalTextDec);
setContentView(txe);
}
catch (Exception e) {
// TODO Auto-generated
catch block
e.printStackTrace();
}
}
}
Thanks for helpful post....waiting for next post now.. u rock "VJ"
ReplyDeleteThank you
Deletenice code pattern,can you add some comment in each area so it help more
ReplyDeleteThank you so much.
ReplyDeleteWhy this is not working in Android version 4.2.1 but works on android2.3
ReplyDeleteNOT WORK ON ANDROID>4.2. Securerandom problem.
ReplyDeleteNice! I like the example. I tried to extend your example for a project I am working on.
ReplyDeleteInstead of using the onCreate method I created a decryptText and encryptText methods like below. I renamed your AESHelper class to AESCrypto. encryptText works great, but your AESHelper class returns and empty string to my decryptText method. What am I missing?
public String encryptText(String str)
{
String clearText = str;
String normalTextEnc = null;
try {
normalTextEnc = AESCrypto.encrypt(seedValue, clearText);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return normalTextEnc;
}
public String decryptText(String str)
{
String encodedText = str;
String clearText = null;
try {
clearText = AESCrypto.decrypt(seedValue, encodedText);;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return clearText;
}
return pad block corrupted
ReplyDelete