package com.bill.mygitosc.utils; import android.annotation.SuppressLint; import java.security.Key; import java.security.spec.AlgorithmParameterSpec; import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import javax.crypto.spec.IvParameterSpec; /** * Created by liaobb on 2015/7/24. */ public class CryptUtils { public static final String ACCOUNT_PWD = "user.pwd"; public static final String ALGORITHM_DES = "DES/CBC/PKCS5Padding"; /** * DES�㷨������ * * @param data �������ַ��� * @param key ����˽Կ�����Ȳ��ܹ�С��8λ * @return ���ܺ���ֽ����飬һ����Base64����ʹ�� * @throws InvalidAlgorithmParameterException * @throws Exception */ @SuppressLint("TrulyRandom") public static String encode(String key, String data) { if (data == null) return null; try { DESKeySpec dks = new DESKeySpec(key.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); //key�ij��Ȳ��ܹ�С��8λ�ֽ� Key secretKey = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance(ALGORITHM_DES); IvParameterSpec iv = new IvParameterSpec("12345678".getBytes()); AlgorithmParameterSpec paramSpec = iv; cipher.init(Cipher.ENCRYPT_MODE, secretKey, paramSpec); byte[] bytes = cipher.doFinal(data.getBytes()); return byte2hex(bytes); } catch (Exception e) { e.printStackTrace(); return data; } } /** * DES�㷨������ * * @param data �������ַ��� * @param key ����˽Կ�����Ȳ��ܹ�С��8λ * @return ���ܺ���ֽ����� * @throws Exception �쳣 */ public static String decode(String key, String data) { if (data == null) return null; try { DESKeySpec dks = new DESKeySpec(key.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); //key�ij��Ȳ��ܹ�С��8λ�ֽ� Key secretKey = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance(ALGORITHM_DES); IvParameterSpec iv = new IvParameterSpec("12345678".getBytes()); AlgorithmParameterSpec paramSpec = iv; cipher.init(Cipher.DECRYPT_MODE, secretKey, paramSpec); return new String(cipher.doFinal(hex2byte(data.getBytes()))); } catch (Exception e) { e.printStackTrace(); return data; } } /** * ������ת�ַ��� * * @param b * @return */ private static String byte2hex(byte[] b) { StringBuilder hs = new StringBuilder(); String stmp; for (int n = 0; b != null && n < b.length; n++) { stmp = Integer.toHexString(b[n] & 0XFF); if (stmp.length() == 1) hs.append('0'); hs.append(stmp); } return hs.toString().toUpperCase(); } private static byte[] hex2byte(byte[] b) { if ((b.length % 2) != 0) throw new IllegalArgumentException(); byte[] b2 = new byte[b.length / 2]; for (int n = 0; n < b.length; n += 2) { String item = new String(b, n, 2); b2[n / 2] = (byte) Integer.parseInt(item, 16); } return b2; } public void baseEncode() { } }