JAVA,AES加密算法
2015-07-15 14:56
549 查看
private static final String AES = "AES"; private static final String CHARSET_NAME = "utf-8"; private static SecretKeySpec getKey(String password) throws NoSuchAlgorithmException { // 密钥加密器生成器 KeyGenerator kgen = KeyGenerator.getInstance(AES); SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); random.setSeed(password.getBytes()); kgen.init(128, random); // 创建加密器 SecretKey secretKey = kgen.generateKey(); byte[] enCodeFormat = secretKey.getEncoded(); SecretKeySpec key = new SecretKeySpec(enCodeFormat, AES); return key; } public static String encode(String str, String password) { byte[] arr = encodeToArr(str, password); return byteArrToString(arr); } private static byte[] encodeToArr(String str, String password) { try { Cipher cipher = Cipher.getInstance(AES);// 创建密码器 byte[] byteContent = str.getBytes(CHARSET_NAME); cipher.init(Cipher.ENCRYPT_MODE, getKey(password));// 初始化 byte[] result = cipher.doFinal(byteContent); return result; } catch (Exception e) { e.printStackTrace(); } return null; } public static String decode(String hexStr, String password) { try { byte[] arr = string2ByteArr(hexStr); return decode(arr, password); } catch (Exception e) { e.printStackTrace(); return null; } } private static String decode(byte[] arr, String password) { try { // 创建密码器 Cipher cipher = Cipher.getInstance(AES); cipher.init(Cipher.DECRYPT_MODE, getKey(password));// 初始化 byte[] result = cipher.doFinal(arr); return new String(result, CHARSET_NAME); } catch (Exception e) { e.printStackTrace(); } return null; } private static String byteArrToString(byte[] arr) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < arr.length; i++) { String s = Integer.toString(arr[i] + 128, 16); if (s.length() == 1) { s = "0" + s; } sb.append(s); } return sb.toString().toUpperCase(); } private static byte[] string2ByteArr(String s) { s = s.toUpperCase(); String str = "0123456789ABCDEF"; byte[] arr = new byte[s.length() / 2]; for (int i = 0; i < arr.length; i++) { char s1 = s.charAt(i * 2); char s2 = s.charAt(i * 2 + 1); int tmp1 = str.indexOf(s1) * 16; int tmp2 = str.indexOf(s2); arr[i] = (byte) (tmp1 + tmp2 - 128); } return arr; }
相关文章推荐
- java单例模式
- java 解析json小案例
- java 对list进行排序
- java文件中数据导出生成Excel表格
- Java多线程编程--初识线程
- Java线程池相关
- "Unable to execute dex: Multiple dex files define..."的解决办法
- java 实现数据库分组功能
- java从jar包中读取xml|properties文件
- JAVA下AES256加密
- Java创建多线程的两种方式对比
- java多线程编程之捕获子线程异常示例
- java 抓取网页内容小工具
- Scheme 4 Javaer-3.高阶函数
- 接口interface
- java基本教程之线程休眠 java多线程教程
- java基本教程之java线程等待与java唤醒线程 java多线程教程
- 浅析Java中Map与HashMap,Hashtable,HashSet的区别
- 例子分析java.util.concurrent.ExecutorService
- java 获取当前时间前7天的日期