Android常用加密代码实现
2016-01-26 13:36
447 查看
DES加密的工具类:
AES加密工具类:
[code]public class DESUtil { /** * 根据指定的密钥加密字符串 * @param encryptString 需要加密的字符串 * @param encryptKey 密钥 * @return 加密后的字符串 * @throws Exception */ public static String encryptDES(String encryptString, String encryptKey) throws Exception { // 实例化IvParameterSpec对象,使用指定的初始化向量,初始化向量根据key生成 IvParameterSpec zeroIv = new IvParameterSpec(encryptKey.getBytes("ASCII")); // 实例化SecretKeySpec类,根据字节数组来构造SecretKey SecretKeySpec key = new SecretKeySpec(encryptKey.getBytes(), "DES"); // 创建密码器 Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); // 用秘钥初始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv); // 执行加密操作 byte[] encryptedData = cipher.doFinal(encryptString.getBytes()); return Base64.encodeToString(encryptedData, Base64.DEFAULT); } /** * 根据指定的密钥对字符串解密 * @param decrypString 需要解密的字符串 * @param decryptKey 密钥 * @return 解密后的字符串 * @throws Exception */ public static String decryptDES(String decrypString, String decryptKey) throws Exception { byte[] byteMi = Base64.decode(decrypString, Base64.DEFAULT); // 实例化IvParameterSpec对象,使用指定的初始化向量 IvParameterSpec zeroIv = new IvParameterSpec(decryptKey.getBytes("ASCII")); // 实例化SecretKeySpec类,根据字节数组来构造SecretKey SecretKeySpec key = new SecretKeySpec(decryptKey.getBytes(), "DES"); // 创建密码器 Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); // 用秘钥初始化Cipher对象 cipher.init(Cipher.DECRYPT_MODE, key, zeroIv); // 执行解密操作 byte[] decryptedData = cipher.doFinal(byteMi); return new String(decryptedData); } }
AES加密工具类:
[code]public class AESUtil { public static byte[] encrypt(String content, String password) { try { KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128, new SecureRandom(password.getBytes())); SecretKey secretKey = kgen.generateKey(); byte[] enCodeFormat = secretKey.getEncoded(); SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); Cipher cipher = Cipher.getInstance("AES");// 创建密码器 byte[] byteContent = content.getBytes("utf-8"); cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化 byte[] result = cipher.doFinal(byteContent); return result; // 加密 } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } return null; } public static byte[] decrypt(byte[] content, String password) { try { KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128, new SecureRandom(password.getBytes())); SecretKey secretKey = kgen.generateKey(); byte[] enCodeFormat = secretKey.getEncoded(); SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); Cipher cipher = Cipher.getInstance("AES");// 创建密码器 cipher.init(Cipher.DECRYPT_MODE, key);// 初始化 byte[] result = cipher.doFinal(content); return result; // 加密 } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } return null; }
相关文章推荐
- Android AIDL SERVICE 双向通信 详解
- Android中 overridePendTransition函数的使用方法
- 王学岗Viewpager(一)
- 快速简单的定制一个时间轴布局(LinearLayout)
- android怪招之开机自启动
- Android-Cannot merge new index 66195 into a non-jumbo instruction的解决办法
- Android应用自动更新功能的代码实现
- Android中使用抖动动画吸引来用户注意
- Android应用安全开发之源码安全
- Android 常见调试工具
- Android下的权限
- Android 开发规范总结
- Android实现定时执行某个任务
- 优化 Android 线程和后台任务开发
- 【Android开源项目分析】android轻量级开源缓存框架——ASimpleCache(ACache)源代码分析
- Android应用开发中草率使用synchronized同步关键字的隐患
- Android中<uses-sdk>属性和target属性分析
- AndroidStudio 向SVN提交代码规则
- Android程序自动化打包
- android studio ndk 开发入门