请各位大侠帮忙看看!!!
在运行解密时,报错:处理发生错误!原因:System.ApplicationException: 不正确的数据。
//加密
protected void Button1_Click(object sender, EventArgs e)
{
try
{
if (FileUpload1.PostedFile.FileName == "")
{
Label1.Text = "要上传的文件不允许为空!";
return;
}
else
{
string filename = "加密后文本.txt";
string filepath = FileUpload1.PostedFile.FileName;
string serverpath = Server.MapPath("File/") + filename;
EncryptFile(filepath,serverpath);
}
}
catch (Exception error)
{
Label1.Text = "处理发生错误!原因:" + error.ToString();
}
}
public void EncryptFile(string filePath, string outPath)
{
bool isExist = File.Exists(filePath);
if (isExist)//如果存在
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//byte[] ivb = Encoding.ASCII.GetBytes(this.iv);
//byte[] keyb = Encoding.ASCII.GetBytes(this.EncryptKey);
//byte[] ivb = System.Text.Encoding.Default.GetBytes(des.IV);
byte[] ivb = des.IV;
byte[] keyb =des.Key;
//得到要加密文件的字节流
FileStream fin = new FileStream(filePath, FileMode.Open, FileAccess.Read);
StreamReader reader = new StreamReader(fin,System.Text.Encoding.Default);
string dataStr = reader.ReadToEnd();
//byte[] toEncrypt = this.EncodingMode.GetBytes(dataStr);
byte[] toEncrypt = System.Text.Encoding.Default.GetBytes(dataStr);
fin.Close();
FileStream fout = new FileStream(outPath, FileMode.Create, FileAccess.Write);
ICryptoTransform encryptor = des.CreateEncryptor(keyb, ivb);
CryptoStream csEncrypt = new CryptoStream(fout, encryptor, CryptoStreamMode.Write);
try
{
//加密得到的文件字节流
csEncrypt.Write(toEncrypt, 0, toEncrypt.Length);
csEncrypt.FlushFinalBlock();
}
catch (Exception err)
{
throw new ApplicationException(err.Message);
}
finally
{
try
{
fout.Close();
csEncrypt.Close();
}
catch
{
;
}
}
}
else
{
throw new FileNotFoundException("没有找到指定的文件 ");
}
}
//解密
protected void Button2_Click(object sender, EventArgs e)
{
try
{
if (FileUpload2.PostedFile.FileName == "")
{
Label1.Text = "要解密的文件不允许为空!";
return;
}
else
{
string filename = "解密后文本.txt";
string filepath = FileUpload2.PostedFile.FileName;
string serverpath = Server.MapPath("File/") + filename;
DecryptFile(filepath, serverpath);
}
}
catch (Exception error)
{
Label1.Text = "处理发生错误!原因:" + error.ToString();
}
}
public void DecryptFile(string filePath, string outPath)
{
bool isExist = File.Exists(filePath);
if (isExist)//如果存在
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] ivb = des.IV;
byte[] keyb = des.Key;
FileInfo file = new FileInfo(filePath);
byte[] deCrypted = new byte[file.Length];
//得到要解密文件的字节流
FileStream fin = new FileStream(filePath, FileMode.Open, FileAccess.Read);
//解密文件
try
{
ICryptoTransform decryptor = des.CreateDecryptor(keyb, ivb);
CryptoStream csDecrypt = new CryptoStream(fin, decryptor, CryptoStreamMode.Read);
csDecrypt.Read(deCrypted, 0, deCrypted.Length);
}
catch (Exception err)
{
throw new ApplicationException(err.Message);
}
finally
{
try
{
fin.Close();
}
catch { ;}
}
FileStream fout = new FileStream(outPath, FileMode.Create, FileAccess.Write);
fout.Write(deCrypted, 0, deCrypted.Length);
fout.Close();
}
else
{
throw new FileNotFoundException("指定的解密文件没有找到 ");
}
}