Java Des加解密方法(c#加密Java解密)

  最近我们用Java把一个用.net编写的老系统重新做了翻版,但是登录还是用.net的登录。这样就会遇到一个比较棘手的问题,我们登录用的cookie信息都是.net用des加密的,但我们不得不用Java解密。我在网上找了下很多关于Java DES加解密的信息,大体有两种:一种是有向量的加解密,一种是没有向量只有秘钥的加解密。C#的DES加密是有向量的,所以我必须得用第一种。这时或许你还会遇到一个不是问题的问题:Java DES加解密的向量必须是8位,而C#可能是十六位,但是这是无关紧要的,因为在Java DES加解密的时候你只需要用C#使用向量的前八位就行了。以下是Java DES加解密的源代码(亲自做过验证):

  

public class DESCryption {
   // DES加密的私钥,必须是8位长的字符串
    private static final byte[] DESkey = { 6, 120, 10, 5, 7, 50, 8, 25, 6, 120, 10, 5, 7, 50, 8, 25 };// 设置密钥、
    private static final byte[] DESIV = { 0x12, 0x34, 0x56, 0x78, (byte) 0x90, (byte) 0xAB, (byte) 0xCD, (byte) 0xAF};// 设置向量
     

    private static AlgorithmParameterSpec iv = null;// 加密算法的参数接口,IvParameterSpec是它的一个实现
    private static Key key = null;

    public DESCryption(byte[] DESkey,byte[] DESIV) throws Exception {
        DESKeySpec keySpec = new DESKeySpec(DESkey);// 设置密钥参数
        iv = new IvParameterSpec(DESIV);// 设置向量
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");// 获得密钥工厂
        key = keyFactory.generateSecret(keySpec);// 得到密钥对象

    }
//加密方法
    public String encode(String data) throws Exception {
        Cipher enCipher = Cipher.getInstance("DES/CBC/PKCS5Padding");// 得到加密对象Cipher
        enCipher.init(Cipher.ENCRYPT_MODE, key, iv);// 设置工作模式为加密模式,给出密钥和向量
        byte[] pasByte = enCipher.doFinal(data.getBytes("utf-8"));
        BASE64Encoder base64Encoder = new BASE64Encoder();
        return base64Encoder.encode(pasByte);
    }
//解密方法
    public String decode(String data) throws Exception {
        Cipher deCipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
        deCipher.init(Cipher.DECRYPT_MODE, key, iv);
        BASE64Decoder base64Decoder = new BASE64Decoder();
        byte[] pasByte = deCipher.doFinal(base64Decoder.decodeBuffer(data));
        return new String(pasByte, "UTF-8");
    }

//测试
public static void main(String[] args) throws Exception {
    DESCryption tools = new DESCryption(DESkey,DESIV);
    System.out.println("加密:" + tools.encode("管理员"));
    System.out.println("解密:" + tools.decode("T9YwLGYNbN0="));
}
}

  希望以上代码能够解决和我遇到同样问题的童鞋!

posted on 2014-05-14 09:53  Lei1990  阅读(2080)  评论(1编辑  收藏  举报

导航