C#文件加密方法汇总
1. 背景
在一些场景下,为了保护敏感信息,我们需要对文件进行加密。在C#语言下,我们可以使用多种方式来实现文件加密功能。本文将对其中几种文件加密方法进行总结和说明。
2. 文件加密方法汇总
2.1 对称加密
对称加密是指加密和解密都使用同一把密钥的加密方式。常见的对称加密算法有DES、3DES、AES等。对于文本文件,C#中可以使用System.Security.Cryptography命名空间中的SymmetricAlgorithm类进行对称加密。示例代码如下:
using System;
using System.IO;
using System.Security.Cryptography;
class Program
{
static void Main()
{
string sourcePath = @"C:\text.txt";
string destPath = @"C:\text_encrypted.txt";
string key = "mykey";
EncryptFile(sourcePath, destPath, key);
}
static void EncryptFile(string sourcePath, string destPath, string key)
{
SymmetricAlgorithm algorithm = SymmetricAlgorithm.Create();
algorithm.Key = Encoding.UTF8.GetBytes(key);
using (FileStream sourceFile = File.Open(sourcePath, FileMode.Open))
using (FileStream destFile = File.Create(destPath))
{
using (CryptoStream cryptoStream = new CryptoStream(destFile, algorithm.CreateEncryptor(), CryptoStreamMode.Write))
{
sourceFile.CopyTo(cryptoStream);
}
}
}
}
2.2 非对称加密
非对称加密是指加密和解密使用不同的密钥的加密方式。常见的非对称加密算法有RSA、ECC等。对于文件加密,可以使用非对称加密算法加密文件的对称密钥,并将加密后的对称密钥和加密后的文件存储在一起。接收方在收到文件后,先使用非对称算法解密出对称密钥,再使用对称算法解密文件。示例代码如下:
using System;
using System.IO;
using System.Security.Cryptography;
class Program
{
static void Main()
{
string sourcePath = @"C:\text.txt";
string destPath = @"C:\text_encrypted.txt";
string publicKeyPath = @"C:\publicKey.xml";
EncryptFile(sourcePath, destPath, publicKeyPath);
}
static void EncryptFile(string sourcePath, string destPath, string publicKeyPath)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(File.ReadAllText(publicKeyPath));
byte[] key = new byte[16];
using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
rng.GetBytes(key);
}
byte[] encryptedKey = rsa.Encrypt(key, false);
using (SymmetricAlgorithm algorithm = SymmetricAlgorithm.Create())
{
algorithm.Key = key;
using (FileStream sourceFile = File.Open(sourcePath, FileMode.Open))
using (FileStream destFile = File.Create(destPath))
{
using (CryptoStream cryptoStream = new CryptoStream(destFile, algorithm.CreateEncryptor(), CryptoStreamMode.Write))
{
sourceFile.CopyTo(cryptoStream);
}
}
}
File.WriteAllBytes(destPath + ".key", encryptedKey);
}
}
2.3 文件压缩加密
文件压缩加密是指将文件先进行压缩,再进行加密的方式。压缩可以使文件更小,节省存储空间和传输带宽。对于文件加密,可以使用压缩算法先压缩文件,然后再使用对称或非对称加密算法进行加密。示例代码如下:
using System;
using System.IO;
using System.IO.Compression;
using System.Security.Cryptography;
using System.Text;
class Program
{
static void Main()
{
string sourcePath = @"C:\text.txt";
string destPath = @"C:\text_encrypted.zip";
string key = "mykey";
EncryptFile(sourcePath, destPath, key);
}
static void EncryptFile(string sourcePath, string destPath, string key)
{
byte[] keyBytes = Encoding.UTF8.GetBytes(key);
using (FileStream sourceFile = File.Open(sourcePath, FileMode.Open))
using (FileStream destFile = File.Create(destPath))
{
using (GZipStream gzip = new GZipStream(destFile, CompressionMode.Compress))
using (CryptoStream cryptoStream = new CryptoStream(gzip, SymmetricAlgorithm.Create().CreateEncryptor(keyBytes, keyBytes), CryptoStreamMode.Write))
{
sourceFile.CopyTo(cryptoStream);
}
}
}
}
3. 总结
本文介绍了几种常见的C#文件加密方法,包括对称加密、非对称加密、文件压缩加密等。这些加密方法各有优缺点,具体应用时需要根据实际情况进行选择。希望本文能够帮助读者更好地了解C#文件加密的方法和实现。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#文件加密方法汇总 - Python技术站