为什么在解密的时候总是报错:不正确的数据,代码如下: 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;
}
{
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;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货