Android实现AES加密/解密代码

jopen 10年前

            import java.security.SecureRandom;                import javax.crypto.Cipher;        import javax.crypto.KeyGenerator;        import javax.crypto.SecretKey;        import javax.crypto.spec.IvParameterSpec;        import javax.crypto.spec.SecretKeySpec;                import android.app.Activity;        import android.os.Bundle;        import android.util.Log;        import android.view.Menu;        import android.view.MenuItem;                public class MainActivity extends Activity {                    private static final String TAG = "MainActivity";                    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", "Crypto");                sr.setSeed(seed);                kgen.init(128, sr);                 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, new IvParameterSpec(                        new byte[cipher.getBlockSize()]));                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, new IvParameterSpec(                        new byte[cipher.getBlockSize()]));                byte[] decrypted = cipher.doFinal(encrypted);                return decrypted;            }                    private static String toHex(String txt) {                return toHex(txt.getBytes());            }                    private static String fromHex(String hex) {                return new String(toByte(hex));            }                    private 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;            }                    private 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));            }                    @Override            protected void onCreate(Bundle savedInstanceState) {                super.onCreate(savedInstanceState);                setContentView(R.layout.activity_main);                        String masterPassword = "key";                String originalText = "0123456789";                try {                    String encryptingCode = MainActivity.encrypt(masterPassword,                            originalText);                            Log.e(TAG, "加密后: " + encryptingCode);                    String decryptingCode = MainActivity.decrypt(masterPassword,                            encryptingCode);                            Log.e(TAG, "解密后: " + decryptingCode);                } catch (Exception e) {                    e.printStackTrace();                }                    }                }