这是一个C#的解密DES方法,需要在java平台下跑,请问java下有没有对应的类,具体如何做
谢谢public string DesDecrypt(string base64str, string tkey)  //解密
        {
            try
            {
                //byte[] inputByteArray = Convert.FromBase64String(base64str);                byte[] arrB = Encoding.UTF8.GetBytes(base64str);
                int iLen = arrB.Length;                // 两个字符表示一个字节,所以字节数组长度是字符串长度除以2
                byte[] inputByteArray = new byte[iLen / 2];
                string strTmp = "";
                for (int i = 0; i < iLen; i = i + 2)
                {
                    strTmp = Encoding.Default.GetString(arrB, i, 2);
                    //Console.WriteLine(strTmp);
                    inputByteArray[i / 2] = (byte)int.Parse(strTmp, System.Globalization.NumberStyles.HexNumber);
                }                DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
                DCSP.Mode = CipherMode.ECB;
                DCSP.Padding = PaddingMode.None;
                DCSP.Key = getKey(tkey);                MemoryStream mStream = new MemoryStream();
                CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(), CryptoStreamMode.Write);
                cStream.Write(inputByteArray, 0, inputByteArray.Length);
                cStream.FlushFinalBlock();
                return Encoding.Default.GetString(mStream.ToArray());
            }
            catch (Exception ex)
            {
                return ex.ToString();
            }        }

解决方案 »

  1.   

    其实就C#加密,java进行解密!!谢谢
      

  2.   

    楼主笨蛋!其实加密方法就是解密方法,只要传入的tkey跟加密时的tkey相同,就可以把内容解密!!不信可以自己建一个类试试其实加密,解密的原理非常简单,就是对底层的byte做 移位操作 或 异或操作 !
      

  3.   

    楼上的意思是自己写DES算法?
    Java中解密的方式和C#中不一样,所以我解不了
      

  4.   

    步驟差不多啦,給你一個例子import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;
    import javax.crypto.SecretKey;
    import sun.misc.BASE64Encoder;
    import java.io.*;/*
     * Demo of DESede (triple-DES) algorithm with ECB mode & PKCS5Padding
     */public class TestDESedeECBPKCS5Padding {
    private static final String ALGORITHM = "DESede";
    private static final String TRANSFORMATION = "DESede/ECB/PKCS5Padding";

    public static void main(String[] args) {
    System.out.println("**************Demo of " + TRANSFORMATION + " ***************");
    try {
    //create key
    KeyGenerator keyGen = KeyGenerator.getInstance(ALGORITHM);
    //keysize of 3DES should be 112/168
    keyGen.init(168);
    SecretKey key = keyGen.generateKey();
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Input plain text:");
    String plainText = br.readLine();
    Cipher c = Cipher.getInstance(TRANSFORMATION);
    //initialize the cipher
    c.init(Cipher.ENCRYPT_MODE, key);
    //do the encryption
    byte[] encrypted = c.doFinal(plainText.getBytes("UTF8"));
    BASE64Encoder encoder = new BASE64Encoder();
    System.out.println("---BASE64 encoding string of encrypted data:");
    System.out.println(encoder.encode(encrypted));
    System.out.println("---end here.");

    c.init(Cipher.DECRYPT_MODE, key);
    byte[] decrypted = c.doFinal(encrypted);
    System.out.println("Decrypted data:");
    System.out.println(new String(decrypted, "UTF8"));


    } catch (Exception eee) {
    eee.printStackTrace();
    }

    }}
    但加密解密要用到同一個key
      

  5.   

    主要是用Cipher類,Cipher.getInstance()後,再初始化解密,cipherObj.init(Cipher.DECRYPT_MODE, your_key),再解密就行