using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Security.Cryptography;namespace ConsoleApplication3
{
    class Program
    {
        //数据流向字符串的转换
        private static string  getString(byte[] bytes)
        {            if (bytes == null || bytes.Length == 0)                throw new ArgumentException("bytes [] 参数出错");            StringBuilder hexString = new StringBuilder(2 * bytes.Length);            for (int i = 0; i < bytes.Length; i++)
                hexString.AppendFormat("{0:X2}", bytes[i]);            return hexString.ToString();        }   //字符串向数据流的转换
        private static byte[] getStreem(string strHexString)
        {            int len = strHexString.Length;
            if ((len % 2) != 0)
                throw new Exception("HexString 字符出错!!");            int byteLen = len / 2;            byte[] bytes = new byte[byteLen];            for (int i = 0; i < byteLen; i++)
            {
                bytes[i] = Convert.ToByte(strHexString.Substring(i * 2, 2), 16);
            }            return bytes;
        }
  
    //加密
        private static string addkey(string str)
        {            MemoryStream merStream = new MemoryStream();
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            CryptoStream cry = new CryptoStream(merStream, des.CreateEncryptor(), CryptoStreamMode.Write);
            StreamWriter sw = new StreamWriter(cry);
            sw.Close();
            byte[] buffer = merStream.ToArray();
            merStream.Close();
            return getString(buffer);
            merStream.Close();
            des.Clear();        }
        //解密
        private static string remove(string str)
        {            byte[] streem = getStreem(str);
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            MemoryStream mes = new MemoryStream(streem);
            CryptoStream crystreem = new CryptoStream(mes, des.CreateEncryptor(), CryptoStreamMode.Read);
            StreamReader streaR = new StreamReader(crystreem);
            
            ;
            return streaR.ReadLine();
            mes.Close();
            streaR.Dispose();
     
        }
        
        static void Main(string[] args)
        {            string aa = "huangnboo";
            
            //Console.WriteLine(aa);
           //Console.WriteLine(getString( getStreem(aa)));
            string bb = addkey(aa);
            Console.WriteLine(bb);
            Console.WriteLine(remove(bb));
        }
    }
}
解密出来的是乱码!
我估计问题出在   //字符串向数据流的转换  -----------这方法中!
help

解决方案 »

  1.   

     public static byte[] Encrypt(string PlainText, SymmetricAlgorithm key)
        {
            MemoryStream ms = new MemoryStream();
            CryptoStream encStream = new CryptoStream(ms, key.CreateEncryptor(), CryptoStreamMode.Write);
            StreamWriter sw = new StreamWriter(encStream);
            sw.WriteLine(PlainText);
            sw.Close();
            encStream.Close();
            byte[] buffer = ms.ToArray();
            ms.Close();
            return buffer;
        }    public static string Decrypt(byte[] CypherText, SymmetricAlgorithm key)
        {
            MemoryStream ms = new MemoryStream(CypherText);
            CryptoStream encStream = new CryptoStream(ms, key.CreateDecryptor(), CryptoStreamMode.Read);
            StreamReader sr = new StreamReader(encStream);
            string val = sr.ReadLine();
            sr.Close();
            encStream.Close();
            ms.Close();
            return val;
        }
      

  2.   


    //数据流向字符串的转换 
    private static string  getString(byte[] bytes) 

        if (bytes == null || bytes.Length == 0) 
            throw new ArgumentException("bytes [] 参数出错"); 
        return System.Text.Encoding.Default.GetString(bytes);

      

  3.   

    C# code
    //数据流向字符串的转换 
    private static string  getString(byte[] bytes) 

        if (bytes == null || bytes.Length == 0) 
            throw new ArgumentException("bytes [] 参数出错"); 
        return System.Text.Encoding.Default.GetString(bytes);
    } 仍然是有问题
      

  4.   

    你的程序没看完,不过我猜到问题是什么了,试下这样
    /// <summary>
            /// DES加密
            /// </summary>
            /// <param name="text"></param>
            /// <param name="key"></param>
            /// <param name="iv"></param>
            /// <returns></returns>
            public static string DESEncrypt(string text, ref string key,ref string iv)
            {
                string desStr;
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                key = Convert.ToBase64String(des.Key);
                iv = Convert.ToBase64String(des.IV);
                MemoryStream memoryStream = new MemoryStream();
                CryptoStream cryptoStream = new CryptoStream(memoryStream, des.CreateEncryptor(), CryptoStreamMode.Write);
                StreamWriter sw = new StreamWriter(cryptoStream);
                sw.Write(text);
                sw.Close();
                cryptoStream.Close();
                desStr = Convert.ToBase64String(memoryStream.ToArray());
                memoryStream.Close();
                return desStr;
            }        /// <summary>
            /// DES解密
            /// </summary>
            /// <param name="text"></param>
            /// <param name="key"></param>
            /// <param name="iv"></param>
            /// <returns></returns>
            public static string DESDecrypt(string text, string key, string iv)
            {
                string desStr;
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                des.Key = Convert.FromBase64String(key);
                des.IV = Convert.FromBase64String(iv);
                MemoryStream memoryStream = new MemoryStream(Convert.FromBase64String(text));
                CryptoStream cryptoStream = new CryptoStream(memoryStream, des.CreateDecryptor(), CryptoStreamMode.Read);
                StreamReader sr = new StreamReader(cryptoStream);
                desStr = sr.ReadToEnd();
                sr.Close();
                cryptoStream.Close();
                memoryStream.Close();
                return desStr;
            }