public static String desDecrypt(String message, String key) throws Exception {
        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");        DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
        IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
        cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);        BASE64Decoder decoder = new BASE64Decoder();
        byte[] ciphertext = cipher.doFinal(decoder.decodeBuffer(message));
        String cipertextString = new String(ciphertext);
        return cipertextString;
    }
翻译为NET 

解决方案 »

  1.   


    懒得翻。我只是提醒你,只有这两行代码  BASE64Decoder decoder = new BASE64Decoder();
      byte[] ciphertext = cipher.doFinal(decoder.decodeBuffer(message));这才是真正的des解密,而其它代码都属于应用系统为des解密所增加的外部流程。我们之所以听有人说“那个是des加密的,我怎么进行des解密就不正确?”,其实人家输出的根本就是应用程序进行了处理的结果,而不仅仅是什么des解密,这时候你的所谓解密就需要根据人家的des解密以外的外部处理流程进行额外的逆操作才行。
      

  2.   

    sorry,拷贝错了一行代码,应该是:  cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);  byte[] ciphertext = cipher.doFinal(decoder.decodeBuffer(message));参数传进来的key变量并不是真正的key,同时des解密是对byte[]操作而不是对string操作,所以两个参数都不是解密的原始数据,都需要做两三步转换,从而得到des解密的真正的输入数据。最后,将得到的byte[]又按照你的应用程序协议转换为string输出了。
      

  3.   

    前一阵子刚好搞这个东西,看看是否有帮助
    JAVA和C# 3DES加密解密