日期:2014-05-20 浏览次数:21207 次
public static String DESDecrypt(String data, String key, String encoding)
{
    String edata = data;
    try
    {
        MessageDigest digest = MessageDigest.getInstance("MD5");
        digest.update(key.getBytes(encoding));
        DESedeKeySpec dks = new DESedeKeySpec(convert16To24(digest.digest()));
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
        SecretKey securekey = keyFactory.generateSecret(dks);
        Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE , securekey, new SecureRandom());
        if (!data.endsWith( "=" ))
        {
            data = URLDecoder.decode(data, encoding);
        }
        edata = new String(cipher.doFinal(BASE64Decrypt(data)), encoding);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    return edata;
}
/**
* BASE64 解密
*
* @param key
* @return
* @throws Exception
*/
public static byte [] BASE64Decrypt(String data)
{
    byte [] edata = null ;
    try
    {
        edata = ( new BASE64Decoder()).decodeBuffer(data);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    return edata;
}
/**
* 把 16 位凑成 24 位数组。
*
* @param okey
* @return
*/
private static  byte [] convert16To24(byte [] okey)
{
    byte [] dkey = new byte [24];
    for (int i = 0; i < dkey. length ; i++)
    {
        dkey[i] = okey[i % 16];
    }
    return dkey;
}