网上有很多java版的AES加密解密例子代码,但都因为路径问题,在Android上无法使用.

以下代码在Android上测试通过

 

package cn.com.smartpay.app.http;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;/** * @author carlos carlosk@163.com * @version 创建时间:2012-5-17 上午9:48:35 类说明 */public class AESUtils {    public static final String TAG = "AESUtils";    public static String encrypt(String seed, String clearText) {        // Log.d(TAG, "加密前的seed=" + seed + ",内容为:" + clearText);        byte[] result = null;        try {            byte[] rawkey = getRawKey(seed.getBytes());            result = encrypt(rawkey, clearText.getBytes());        } catch (Exception e) {            e.printStackTrace();        }        String content = toHex(result);        // Log.d(TAG, "加密后的内容为:" + content);        return content;    }    public static String decrypt(String seed, String encrypted) {        // Log.d(TAG, "解密前的seed=" + seed + ",内容为:" + encrypted);        byte[] rawKey;        try {            rawKey = getRawKey(seed.getBytes());            byte[] enc = toByte(encrypted);            byte[] result = decrypt(rawKey, enc);            String coentn = new String(result);            // Log.d(TAG, "解密后的内容为:" + coentn);            return coentn;        } catch (Exception e) {            e.printStackTrace();            return null;        }    }    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);        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 cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");        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 cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");        cipher.init(Cipher.DECRYPT_MODE, skeySpec, new IvParameterSpec(                new byte[cipher.getBlockSize()]));        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 static void appendHex(StringBuffer sb, byte b) {        final String HEX = "0123456789ABCDEF";        sb.append(HEX.charAt((b >> 4) & 0x0f)).append(HEX.charAt(b & 0x0f));    }}


原文地址:点击打开链接

更多相关文章

  1. 用Android代码实现自动打开USB调试
  2. android典型代码系列(一)------android调试
  3. Android 动画框架代码分析
  4. Android 7.0 app代码修改抓包
  5. android延续按两次返回退出程序(完整代码)
  6. Android 实现在Java代码中修改UI界面,并修改界面
  7. JS调用Java代码(Android)
  8. 【Android】Android Layout Binder——根据layout布局文件自动生
  9. Android应用程序进程启动过程的源代码分析(2)

随机推荐

  1. Android(安卓)图片选择器 PictureSelecto
  2. Android(安卓)支持多屏幕机制
  3. Eclipse环境下格式化Android的代码风格
  4. android 分辨率问题
  5. Android(1.初识Android应用程序目录)
  6. android layout属性介绍
  7. Android中Activity启动模式详解
  8. android中TextView图文混排
  9. Android-FrameLayout(帧布局)
  10. android五子棋游戏源码