最近在学习用C#实现DES加解密,下边是从网上看到的一个示范类。
先开始在一个控制台程序中实验时,效果很好。但后来我把它放到一个以前编的socket通信的WINDOWS应用程序中用时就出了问题,加密后的字串传到另一端时无法解密,用红色标出的地方过不去,大家帮我看看是怎么回事啊    class Des
    { 
        //方法 
        //加密方法 
        public string Encrypt(string pToEncrypt, string sKey)
        {            DESCryptoServiceProvider des = new DESCryptoServiceProvider();            //把字符串放到byte数组中 
            //原来使用的UTF8编码,我改成Unicode编码了,不行             byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);            //byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt); 
            //建立加密对象的密钥和偏移量 
            //原文使用ASCIIEncoding.ASCII方法的GetBytes方法 
            //使得输入密码必须输入英文文本 
            if (sKey.Length != 8) return ("wrong key");            des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
            des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);            //Write the byte array into the crypto stream             //(It will end up in the memory stream)             cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            //Get the data back from the memory stream, and into a string 
            StringBuilder ret = new StringBuilder();
            foreach (byte b in ms.ToArray())
            {
                //Format as hex 
                ret.AppendFormat("{0:X2}", b);
            }            ret.ToString();
            return ret.ToString();
        }         //解密方法         public string Decrypt(string pToDecrypt, string sKey)
        {            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            //Put the input string into the byte array 
            try
            {
                byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
                for (int x = 0; x < pToDecrypt.Length / 2; x++)
                {
                    int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
                    inputByteArray[x] = (byte)i;
                 }

                //建立加密对象的密钥和偏移量,此值重要,不能修改 
                //inputByteArray = Convert.FromBase64String(pToDecrypt);                des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();
                StringBuilder ret = new StringBuilder();
                return System.Text.Encoding.Default.GetString(ms.ToArray());            }
            catch (Exception ef)
            {
                return ef.Message;
            }
        }
    }