/// <summary>
/// 随机产生密钥
/// </summary>
/// <returns></returns>
static string GenerateKey()
{
// Create an instance of Symetric Algorithm. Key and IV is generated automatically.
DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
// Use the Automatically generated key for Encryption.
return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
}
/// <summary>
/// DES加密文件内容(不支持中文)
/// </summary>
/// <param name="sInputFilename">输入文件名</param>
/// <param name="sOutputFilename">输出文件名</param>
/// <param name="sKey">加密密钥8位</param>
public static void EncryptFileByASCII(string sInputFilename,string sOutputFilename,string sKey)
{
FileStream fsInput = new FileStream(sInputFilename,FileMode.Open,FileAccess.Read);
FileStream fsEncrypted = new FileStream(sOutputFilename,FileMode.Create,FileAccess.Write);
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
ICryptoTransform desencrypt = DES.CreateEncryptor();
CryptoStream cryptostream = new CryptoStream(fsEncrypted,desencrypt,CryptoStreamMode.Write);
byte[] bytearrayinput = new byte[fsInput.Length];
fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);
cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
cryptostream.Close();
fsInput.Close();
fsEncrypted.Close();
}
/// <summary>
/// DES解密文件(不支持中文)
/// </summary>
/// <param name="sInputFilename">输入文件名</param>
/// <param name="sOutputFilename">输出文件名</param>
/// <param name="sKey">解密密钥8位</param>
public static void DecryptFileByASCII(string sInputFilename, string sOutputFilename, string sKey)
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
//A 64 bit key and IV is required for this provider.
//Set secret key For DES algorithm.
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
//Set initialization vector.
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
//Create a file stream to read the encrypted file back.
FileStream fsread = new FileStream(sInputFilename,FileMode.Open,FileAccess.Read);
//Create a DES decryptor from the DES instance.
ICryptoTransform desdecrypt = DES.CreateDecryptor();
//Create crypto stream set to read and do a
//DES decryption transform on incoming bytes.
CryptoStream cryptostreamDecr = new CryptoStream(fsread,desdecrypt,CryptoStreamMode.Read);
//Print the contents of the decrypted file.
StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);
fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());
fsDecrypted.Flush();
fsDecrypted.Close();
}
/// <summary>
/// 对文件内容进行DES加密(支持中文)
/// </summary>
/// <param name="sourceFile">待加密的文件绝对路径</param>
/// <param name="destFile">加密后的文件保存的绝对路径</param>
/// <param name="sKey">加密密钥8位</param>
public static void EncryptFileByUnicode(string sourceFile, string destFile,string sKey)
{
if (!File.Exists(sourceFile))
{
throw new FileNotFoundException("指定的文件路径不存在!", sourceFile);
}
byte[] btKey = Encoding.Default.GetBytes(sKey);
byte[] btIV = Encoding.Default.GetBytes(sKey);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] btFile = File.ReadAllBytes(sourceFile);
using (FileStream fs = new FileStream(destFile, FileMode.Create, FileAccess.Write))
{
try
{
using (CryptoStream cs = new CryptoStream(fs, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))
{
cs.Write(btFile, 0, btFile.Length);
cs.FlushFinalBlock();
}
}
catch
{
throw;
}
finally
{
fs.Close();
}
}
}
/// <summary>
/// 对文件内容进行DES加密,加密后覆盖掉原来的文件(支持中文)
/// </summary>
/// <param name="sourceFile">待加密的文件的绝对路径</param>
/// <param name="sKey">加密密钥8位</param>
public static void EncryptFileByUnicode(string sourceFile, string sKey)
{
EncryptFileByUnicode(sourceFile, sourceFile, sKey);
}
/// <summary>
/// 对文件内容进行DES解密(支持中文)
/// </summary>
/// <param name="sourceFile">待解密的文件绝对路径</param>
/// <param name="destFile">解密后的文件保存的绝对路径</param>
/// <param name="sKey">解密密钥8位</param>
public static void DecryptFileByUnicode(string sourceFile, string destFile, string sKey)
{
if (!File.Exists(sourceFile)) throw new FileNotFoundException("指定的文件路径不存在!", sourceFile);
byte[] btKey = Encoding.Default.GetBytes(sKey);
byte[] btIV = Encoding.Default.GetBytes(sKey);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] btFile = File.ReadAllBytes(sourceFile);
using (FileStream fs = new FileStream(destFile, FileMode.Create, FileAccess.Write))
{
try
{
using (CryptoStream cs = new CryptoStream(fs, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write))
{
cs.Write(btFile, 0, btFile.Length);
cs.FlushFinalBlock();
}
}
catch
{
throw;
}
finally
{
fs.Close();
}
}
}
/// <summary>
/// 对文件内容进行DES解密,加密后覆盖掉原来的文件(支持中文)
/// </summary>
/// <param name="sourceFile">待解密的文件的绝对路径</param>
/// <param name="sKey">解密密钥8位</param>
public static void DecryptFileByUnicode(string sourceFile, string sKey)
{
DecryptFileByUnicode(sourceFile, sourceFile, sKey);
}