请看代码:
就是一个类实现字符串的加密和解密
但是解密总要出错,提是要解密的数据无效
               /// <summary>
        /// 字符串加密
        /// </summary>
        /// <param name="encrypt">要加密的字符串</param>
        /// <returns>加密后的字符串</returns>
        [Obsolete("next version will remove",false)]
        public static string _encryptString(string encrypt)
        {
            try
            {
                byte[] keys = Encoding.UTF8.GetBytes("iloveyou");//8维
                //byte[] iv = Encoding.UTF8.GetBytes("googlego");
                byte[] data = Encoding.UTF8.GetBytes(encrypt);
                DESCryptoServiceProvider desc = new DESCryptoServiceProvider();
                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, desc.CreateEncryptor(keys,keys), CryptoStreamMode.Write);
                cs.Write(data, 0, data.Length);
                cs.FlushFinalBlock();
                ms.Close();
                ms.Dispose();
                cs.Close();
                cs.Dispose();
                //return Encoding.UTF8.GetString(ms.ToArray());
                return Convert.ToBase64String(ms.ToArray());
            }
            catch
            {
                return encrypt;
            }
        }
        /// <summary>
        /// 字符串解密
        /// </summary>
        /// <param name="decrypt">要解密的字符串</param>
        /// <returns>解密后的字符串</returns>
        [Obsolete("this method will come true next version", false)]
        public static string _decryptString(string decrypt)
        {
            try
            {
                byte[] keys = Encoding.UTF8.GetBytes("iloveyou");//Default,ASCII编码都不行,
                byte[] data = Encoding.UTF8.GetBytes(decrypt);
                DESCryptoServiceProvider desc = new DESCryptoServiceProvider();
                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, desc.CreateDecryptor(keys,keys), CryptoStreamMode.Write);
                cs.Read(data, 0, data.Length);
                cs.FlushFinalBlock();//这里出现异常,是-Length否“cs.Length”引发了//System.NotSupportedException”类型的异常 long {System.NotSupportedException} "流不支持查找"                ms.Close();
                ms.Dispose();
                cs.Close();
                cs.Dispose();
                //return Encoding.UTF8.GetString(ms.ToArray());//用这个也不行
                return Convert.ToBase64String(ms.ToArray());
            }
            catch//(Exception exp)
            {
                return decrypt;
            }
        }
就连MSDN(VS2005自带)代码,也会出现异常.
前台调用方法:
private void encrypt_Click(object sender, EventArgs e)
        {
            MessageBox.Show(endeString._encryptString("google"));//显示加密字符串,endeString是加密解密类
        }        private void decrypt_Click(object sender, EventArgs e)
        {
            MessageBox.Show(endeString._decryptString(endeString._encryptString("google")));
        }

解决方案 »

  1.   

    这方面有实例的,MS案例就有,查一下PetShop就OK了。
      

  2.   

    低价转让:中#美#爱#梯#科技.Net软件工程师培训课程内容(共35G),声音清晰,课程完整!
    需要这个培训视频的朋友请联系 QQ 936652114
      

  3.   

    解密:public static string DESDecrypt(string cipher, string key64, string iv64)
    {
       byte[] byteskey= ASCIIEncoding.ASCII.GetBytes(key64);
       byte[] bytesiv= ASCIIEncoding.ASCII.GetBytes(iv64);
       byte[] bytesCipher = Convert.FromBase64String(cipher);
       DESCryptoServiceProvider des = new DESCryptoServiceProvider();
       MemoryStream ms = new MemoryStream(bytesCipher);
       CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byteskey, bytesiv), CryptoStreamMode.Read);
       StreamReader sr = new StreamReader(cs);
       string plainText = sr.ReadToEnd();
       sr.Close();
       cs.Close();
       ms.Close();
       return plainText;
    }
      

  4.   

    加密:public static String EncryptDES(string plain, string key64, string iv64)
    {
       byte[] byteskey= ASCIIEncoding.ASCII.GetBytes(key64);
       byte[] bytesiv= ASCIIEncoding.ASCII.GetBytes(iv64);
       DESCryptoServiceProvider des = new DESCryptoServiceProvider();
       MemoryStream ms = new MemoryStream();
       CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(byteskey, bytesiv), CryptoStreamMode.Write);
       StreamWriter sw = new StreamWriter(cs);
       sw.Write(plain);
       sw.Flush();
       cs.FlushFinalBlock();
       ms.Flush();
       return (Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length));
    }
      

  5.   

     CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byteskey, bytesiv), CryptoStreamMode.Read);//+ Length “cs.Length”引发了“System.NotSupportedException”类型的异常 long {System.NotSupportedException}
    //+ base {"流不支持查找。"} System.SystemException {System.NotSupportedException}
    报错啊
      

  6.   

    如果解密时的key或iv不合法,或者和加密时的不一样,就会抛出异常的一般情况下,解密最好用上try...catch
      

  7.   


    能帮我看看一楼的代码吗?我再跟踪看看key和iv是不是一样的哈
      

  8.   

    你的代码错误太多,懒得改了。下面是我写的,你自己对比一下。        public  string Encrypt(string PlainText, SymmetricAlgorithm key)
            {
                MemoryStream ms = new MemoryStream();
                CryptoStream encStream = new CryptoStream(ms, key.CreateEncryptor(), CryptoStreamMode.Write);
                StreamWriter sw = new StreamWriter(encStream);
                sw.Write(PlainText);
                sw.Close();
                encStream.Close();
                string val=Convert.ToBase64String( ms.ToArray());
                ms.Close();
                return val;
            }        public  string Decrypt(string CypherText, SymmetricAlgorithm key)
            {
                byte[] bytes = Convert.FromBase64String(CypherText);
                MemoryStream ms = new MemoryStream(bytes);
                CryptoStream encStream = new CryptoStream(ms, key.CreateDecryptor(), CryptoStreamMode.Read);
                StreamReader sr = new StreamReader(encStream);
                string val = sr.ReadToEnd();
                sr.Close();
                encStream.Close();
                ms.Close();
                return val;
            }        private void button1_Click(object sender, EventArgs e)
            {
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                string buffer=Encrypt(textBox1.Text,des);
                label1.Text = Decrypt(buffer, des);
            }
      

  9.   

    忘了加上key        public  string Encrypt(string PlainText, SymmetricAlgorithm key)
            {
                byte[] keys = Encoding.UTF8.GetBytes("iloveyou");//8维
                MemoryStream ms = new MemoryStream();
                CryptoStream encStream = new CryptoStream(ms, key.CreateEncryptor(keys,keys), CryptoStreamMode.Write);
                StreamWriter sw = new StreamWriter(encStream);
                sw.Write(PlainText);
                sw.Close();
                encStream.Close();
                string val=Convert.ToBase64String( ms.ToArray());
                ms.Close();
                return val;
            }        public  string Decrypt(string CypherText, SymmetricAlgorithm key)
            {
                byte[] keys = Encoding.UTF8.GetBytes("iloveyou");//8维
                byte[] bytes = Convert.FromBase64String(CypherText);
                MemoryStream ms = new MemoryStream(bytes);
                CryptoStream encStream = new CryptoStream(ms, key.CreateDecryptor(keys,keys), CryptoStreamMode.Read);
                StreamReader sr = new StreamReader(encStream);
                string val = sr.ReadToEnd();
                sr.Close();
                encStream.Close();
                ms.Close();
                return val;
            }        private void button1_Click(object sender, EventArgs e)
            {
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                string buffer=Encrypt(textBox1.Text,des);
                label1.Text = Decrypt(buffer, des);
            }