Skip to content

Instantly share code, notes, and snippets.

@FrankWu100
Last active December 20, 2015 18:09
Show Gist options
  • Save FrankWu100/6174365 to your computer and use it in GitHub Desktop.
Save FrankWu100/6174365 to your computer and use it in GitHub Desktop.
AES Encryption/Decryption on Java (Not support Android)
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.spec.IvParameterSpec;
import java.security.MessageDigest;
import java.security.spec.AlgorithmParameterSpec;
import javax.xml.bind.DatatypeConverter;
public class AESEnDecryption {
/*
//Sample Code
public static void main(String[] args) throws Exception{
String msg = "123456";
String keyStr = "abcdef";
String ivStr = "ABCDEF";
byte[] msg_byte = msg.getBytes("UTF-8");
System.out.println("Before Encrypt: " + msg);
byte[] ans = AESEnDecryption.encrypt(ivStr, keyStr, msg.getBytes());
System.out.println("After Encrypt: " + new String(ans, "UTF-8"));
String ansBase64 = AESEnDecryption.encryptStrAndToBase64(ivStr, keyStr, msg);
System.out.println("After Encrypt & To Base64: " + ansBase64);
byte[] deans = AESEnDecryption.decrypt(ivStr, keyStr, ans);
System.out.println("After Decrypt: " + new String(deans, "UTF-8"));
String deansBase64 = AESEnDecryption.decryptStrAndFromBase64(ivStr, keyStr, ansBase64);
System.out.println("After Decrypt & From Base64: " + deansBase64);}
*/
public static byte[] encrypt(String ivStr, String keyStr, byte[] bytes) throws Exception{
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(ivStr.getBytes());
byte[] ivBytes = md.digest();
MessageDigest sha = MessageDigest.getInstance("SHA-256");
sha.update(keyStr.getBytes());
byte[] keyBytes = sha.digest();
return encrypt(ivBytes, keyBytes, bytes);
}
static byte[] encrypt(byte[] ivBytes, byte[] keyBytes, byte[] bytes) throws Exception{
AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivBytes);
SecretKeySpec newKey = new SecretKeySpec(keyBytes, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, newKey, ivSpec);
return cipher.doFinal(bytes);
}
public static byte[] decrypt(String ivStr, String keyStr, byte[] bytes) throws Exception{
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(ivStr.getBytes());
byte[] ivBytes = md.digest();
MessageDigest sha = MessageDigest.getInstance("SHA-256");
sha.update(keyStr.getBytes());
byte[] keyBytes = sha.digest();
return decrypt(ivBytes, keyBytes, bytes);
}
static byte[] decrypt(byte[] ivBytes, byte[] keyBytes, byte[] bytes) throws Exception{
AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivBytes);
SecretKeySpec newKey = new SecretKeySpec(keyBytes, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, newKey, ivSpec);
return cipher.doFinal(bytes);
}
public static String encryptStrAndToBase64(String ivStr, String keyStr, String enStr) throws Exception{
byte[] bytes = encrypt(keyStr, keyStr, enStr.getBytes("UTF-8"));
return DatatypeConverter.printBase64Binary(bytes);
}
public static String decryptStrAndFromBase64(String ivStr, String keyStr, String deStr) throws Exception{
byte[] bytes = decrypt(keyStr, keyStr, DatatypeConverter.parseBase64Binary(deStr));
return new String(bytes, "UTF-8");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment