AES256加密即密钥长度为256bit,加密过程中所需要的时间要比128bit多花40%,安全程度自然比128更加安全;

代码:

/** * 说明: AES256加密 *  * @param stringToEncode *            明文 * @param keyString *            密钥 * @return Bses64格式密文 */public static String AES256Encode(String stringToEncode, String keyString)throws NullPointerException {if (keyString.length() == 0 || keyString == null) {return null;}if (stringToEncode.length() == 0 || stringToEncode == null) {return null;}try {SecretKeySpec skeySpec = getKey(keyString);byte[] data = stringToEncode.getBytes("UTF8");final byte[] iv = new byte[16];Arrays.fill(iv, (byte) 0x00);IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);Cipher cipher = Cipher.getInstance("AES");cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivParameterSpec);String encrypedValue = Base64.encodeToString(cipher.doFinal(data),Base64.DEFAULT);return encrypedValue;} catch (InvalidKeyException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();} catch (InvalidAlgorithmParameterException e) {e.printStackTrace();}return "";}/** *  * 说明 :AES256解密 *  * @param text *            Base64格式密文 * @param keyString *            密钥 * @return String格式明文 */public static String AES256Decrypt(String text, String keyString) {// byte[] rawKey = getRawKey(key);if (keyString.length() == 0 || keyString == null) {return null;}if (text.length() == 0 || text == null) {return null;}try {SecretKey key = getKey(keyString);final byte[] iv = new byte[16];Arrays.fill(iv, (byte) 0x00);IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);byte[] data = Base64.decode(text, Base64.DEFAULT);Cipher cipher = Cipher.getInstance("AES");cipher.init(Cipher.DECRYPT_MODE, key, ivParameterSpec);byte[] decrypedValueBytes = (cipher.doFinal(data));String decrypedValue = new String(decrypedValueBytes, "UTF-8");return decrypedValue;} catch (NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (NoSuchPaddingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvalidKeyException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalBlockSizeException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (BadPaddingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvalidAlgorithmParameterException e) {// TODO Auto-generated catch blocke.printStackTrace();}return "";}/** *  * 说明 :将密钥转行成SecretKeySpec格式 *  * @param password *            16进制密钥 * @return SecretKeySpec格式密钥 */private static SecretKeySpec getKey(String password)throws UnsupportedEncodingException {// 如果为128将长度改为128即可int keyLength = 256;byte[] keyBytes = new byte[keyLength / 8];// explicitly fill with zerosArrays.fill(keyBytes, (byte) 0x0);byte[] passwordBytes = toByte(password);int length = passwordBytes.length < keyBytes.length ? passwordBytes.length: keyBytes.length;System.arraycopy(passwordBytes, 0, keyBytes, 0, length);SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");return key;}/** *  * 说明 :随机生成一组AES密钥 *  * @return 16进制AES密钥 */public static String getRawKey() {KeyGenerator kgen = null;SecureRandom sr = null;try {kgen = KeyGenerator.getInstance("AES");// SHA1PRNG 强随机种子算法, 要区别4.2以上版本的调用方法if (android.os.Build.VERSION.SDK_INT >= 17) {sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");} else {sr = SecureRandom.getInstance("SHA1PRNG");}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}kgen.init(256, sr); // 256 bits or 128 bits,192bitsSecretKey skey = kgen.generateKey();byte[] raw = skey.getEncoded();String result = bytes2Hex(raw);return result;}/** * byte数组转换为16进制字符串 *  * @param bts *            数据源 * @return 16进制字符串 */public static String bytes2Hex(byte[] bts) {String des = "";String tmp = null;for (int i = 0; i < bts.length; i++) {tmp = (Integer.toHexString(bts[i] & 0xFF));if (tmp.length() == 1) {des += "0";}des += tmp;}return des;}/** * 将16进制转换为byte数组 *  * @param hexString *            16进制字符串 * @return byte数组 */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;}


更多相关文章

  1. Java中使用ini格式配置文件
  2. 【Android测试工具】03. ApkTool在Mac上的安装和使用(2.0版本)
  3. Android中使用gridview如何让图片在上文字在下
  4. [置顶] GPSMapEdit
  5. Ubuntu下批处理转换jpg 2 png格式
  6. Android(安卓)values资源的定义
  7. JAVA String.format 方法使用介绍
  8. Android中Json数据解析,Thread+Handler ,SimpleAdapter使用小案例
  9. Android之——jni通用工具方法

随机推荐

  1. Android(安卓)Developers:高效的加载大的
  2. 【腾讯优测干货分享】鹅厂专家详解Androi
  3. Android图像处理技术(实现Android中的PS)(二
  4. Android查看调用函数名与行号等信息的日
  5. Android绘图机制与处理技巧(二)——Android
  6. Android之Windows下生成动态库so并打包到
  7. Android前后台传数据乱码,xml
  8. Android(安卓)最新所有框架
  9. Android坐标系统常用方法属性总结
  10. Android/Swing中并发分析