import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import android.util.Base64;
import java.security.Key;
import java.security.spec.AlgorithmParameterSpec;
import javax.crypto.Cipher;


public class DesUtils {

public static final String ALGORITHM_DES = "DES/CBC/PKCS5Padding";


/**
* 解密.
* @param key
* @param data
* @return
* @throws Exception
*/
public static String decode(String key, String data) {
byte[] datas;
String value = null;
try {
if (System.getProperty("os.name") != null
&& (System.getProperty("os.name").equalsIgnoreCase("sunos") || System
.getProperty("os.name").equalsIgnoreCase("linux"))) {
datas = decode(key, Base64.decode(data, 0));
} else {
datas = decode(key, Base64.decode(data, 0));
}
value = new String(datas);
} catch (Exception e) {
value = "";
}
return value;
}

/**
* DES算法,解密
* @param data 待解密字符串
* @param key 解密私钥,长度不能够小于8位
* @return 解密后的字节数组
* @throws Exception 异常
*/
private static byte[] decode(String key, byte[] data) throws Exception {
try {
DESKeySpec dks = new DESKeySpec(key.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
// key的长度不能够小于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 cipher.doFinal(data);
} catch (Exception e) {
throw new Exception(e);
}
}

/**
* DES算法,加密
* @param data 待加密字符串
* @param key 加密私钥,长度不能够小于8位
* @return 加密后的字节数组,一般结合Base64编码使用
* @throws CryptException 异常
*/
public static String encode(String key, String data) throws Exception {
return encode(key, data.getBytes());
}

/**
* DES算法,加密
* @param data 待加密字符串
* @param key 加密私钥,长度不能够小于8位
* @return 加密后的字节数组,一般结合Base64编码使用
* @throws CryptException
* 异常
*/
private static String encode(String key, byte[] data) throws Exception {
try {
DESKeySpec dks = new DESKeySpec(key.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
// key的长度不能够小于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);
return Base64.encodeToString(bytes, 0);
} catch (Exception e) {
throw new Exception(e);
}
}


}
本文地址:http://www.xszlo.com/article/2012-11-19/7501.html,转发请保留这个地址,谢谢

更多相关文章

  1. Android(安卓)崩溃日志的获取方式
  2. Linux Kernel(Android) 加密算法总结(二)- A netlink-based user-s
  3. android客户端加密代码
  4. android md5
  5. android和java平台统一的DES加密解决方案,解决加密不一样的问题
  6. Android(安卓)文件管理方法
  7. Android之RAS加密算法测试
  8. android 简单登陆注册的实现
  9. Android(安卓)实现SHA1加密算法代码

随机推荐

  1. Android中.9.png图片的使用过程和原理
  2. Android之emulator: ERROR及logcat不能提
  3. Android编译环境 相关
  4. android发送/解析彩信的几篇文章
  5. 很实用的android按键处理
  6. Android Tip1:获取 android 每个 app 内存
  7. android 中ScrollView的使用
  8. Android 笔记:Android将图像转换成流存储
  9. 【Android 初学】10、Intent对象的使用
  10. Android——动态广播、静态广播