Created
August 18, 2011 03:37
-
-
Save simple/1153241 to your computer and use it in GitHub Desktop.
AES Sample (simpler)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// modified version of http://www.androidsnippets.com/encryptdecrypt-strings | |
import java.security.SecureRandom; | |
import javax.crypto.Cipher; | |
import javax.crypto.KeyGenerator; | |
import javax.crypto.SecretKey; | |
import javax.crypto.spec.SecretKeySpec; | |
public class AesCrypto { | |
private static String secret = "Sulley#@Wazowski$%"; | |
public String encrypt(String original) { | |
byte[] rawKey; | |
byte[] result; | |
try { | |
rawKey = getRawKey(); | |
result = encrypt(rawKey, original.getBytes()); | |
} catch (Exception e) { | |
//e.printStackTrace(); | |
return ""; | |
} | |
return toHex(result); | |
} | |
public String decrypt(String encrypted) { | |
byte[] rawKey; | |
byte[] enc; | |
byte[] result; | |
try { | |
rawKey = getRawKey(); | |
enc = toByte(encrypted); | |
result = decrypt(rawKey, enc); | |
} catch (Exception e) { | |
result = new byte[0]; | |
e.printStackTrace(); | |
} | |
return new String(result); | |
} | |
private static byte[] getRawKey() throws Exception { | |
KeyGenerator kgen = KeyGenerator.getInstance("AES"); | |
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG"); | |
sr.setSeed(secret.getBytes()); | |
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)); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import static org.junit.Assert.*; | |
import org.junit.Test; | |
public class AesCryptoTest { | |
@Test | |
public void stringCanBeEncryptedAndDecrypted() { | |
String original = "Monster Inc."; | |
AesCrypto aes = new AesCrypto(); | |
String encrypted = aes.encrypt(original); | |
System.out.println("encrypted: " + encrypted); | |
String decrypted = aes.decrypt(encrypted); | |
assertEquals(decrypted, original); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment