为什么在解密的时候总是报错:不正确的数据,代码如下: public static byte[] ToKey(string str)
{
if(str==null)throw(new ArgumentNullException("str"));
byte[] key=new byte[24];
byte[] src=(new SHA1CryptoServiceProvider()).ComputeHash(Encoding.UTF8.GetBytes(str)); 
//打乱
int srclen=src.Length;
//复制
for(int i=0;i<24;i++)
{
key[i]=src[i%srclen];
}
return key;
}

 
static public string TDESEncrypt(string src,string str_key)
{
if(src==null)throw(new ArgumentNullException("src"));
if(str_key==null)throw(new ArgumentNullException("key"));
            byte[] src1=Encoding.UTF8.GetBytes(src);
//取到密码的字节流
byte[] key=ToKey(str_key);
TripleDESCryptoServiceProvider csp=new TripleDESCryptoServiceProvider();
using(MemoryStream ms=new MemoryStream())
{
using(CryptoStream cs=new CryptoStream(ms,csp.CreateEncryptor(key,(byte[])key.Clone()),CryptoStreamMode.Write))
{
cs.Write(src1,0,src1.Length);//进行加密
cs.FlushFinalBlock();
        } return Encoding.UTF8.GetString(ms.ToArray());//取加密后的数据,转换到字符串返回 }
}
static public string TDESDecrypt(string src,string str_key)
{
if(src==null)throw(new ArgumentNullException("src"));
if(str_key==null)throw(new ArgumentNullException("key"));
string src_or;
byte[] key=ToKey(str_key);
        byte[] src1=Encoding.UTF8.GetBytes(src);
TripleDESCryptoServiceProvider csp=new TripleDESCryptoServiceProvider();
using(MemoryStream ms=new MemoryStream())
{
using(CryptoStream cs=new CryptoStream(ms,csp.CreateDecryptor(key,(byte[])key.Clone()),CryptoStreamMode.Write))
{
cs.Write(src1,0,src1.Length);
cs.FlushFinalBlock();
}
src_or= Encoding.UTF8.GetString(ms.ToArray());
}


return src_or;
}