.net aes加密视频等文件
公司学习平台在app端下载下来的视频需要加密
随查找资料参考一些写法
写了aes的加密方法
记录防止忘记
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Class1 { private const string SKey = "_?73^?dVT3st5har3"; private const string SaltKey = "!2S@LT&KT3st5har3EY"; private const int Iterations = 1042; // Recommendation is >= 1000 static byte[] GetBytes(string str) { var bytes = new byte[str.Length * sizeof(char)]; Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); return bytes; } 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); } public static void EncryptFile(string srcFilename, string destFilename) { var aes = new AesManaged(); aes.BlockSize = 128; aes.KeySize = 256; var salt = GetBytes(SaltKey); var key = new Rfc2898DeriveBytes(SKey, salt, Iterations); aes.Key = key.GetBytes(aes.KeySize / 8); aes.IV = key.GetBytes(aes.BlockSize / 8); aes.Mode = CipherMode.CBC; ICryptoTransform transform = aes.CreateEncryptor(aes.Key, aes.IV); using (var dest = new FileStream(destFilename, FileMode.CreateNew, FileAccess.Write, FileShare.None)) { using (var cryptoStream = new CryptoStream(dest, transform, CryptoStreamMode.Write)) { using (var source = new FileStream(srcFilename, FileMode.Open, FileAccess.Read, FileShare.Read)) { source.CopyTo(cryptoStream); } } } } public static void DecryptFile(string srcFilename, string destFilename) { var aes = new AesManaged(); aes.BlockSize = 128; aes.KeySize = 256; var salt = GetBytes(SaltKey); var key = new Rfc2898DeriveBytes(SKey, salt, Iterations); aes.Key = key.GetBytes(aes.KeySize / 8); aes.IV = key.GetBytes(aes.BlockSize / 8); aes.Mode = CipherMode.CBC; ICryptoTransform transform = aes.CreateDecryptor(aes.Key, aes.IV); using (var dest = new FileStream(destFilename, FileMode.CreateNew, FileAccess.Write, FileShare.None)) { using (var cryptoStream = new CryptoStream(dest, transform, CryptoStreamMode.Write)) { try { using (var source = new FileStream(srcFilename, FileMode.Open, FileAccess.Read, FileShare.Read)) { source.CopyTo(cryptoStream); } } catch (CryptographicException exception) { throw new ApplicationException("Decryption failed.", exception); } } } } } }
运行
static void Main(string[] args) { // Class1.EncryptFile(@"C:\kc_Page_2.mp4", @"C:\kc_Page_3.mp4"); //Class1.DecryptFile(@"C:\kc_Page_3.mp4", @"C:\kc_Page_4.mp4"); Class1.EncryptFile(@"C:\1.docx", @"C:\2.docx"); Class1.DecryptFile(@"C:\2.docx", @"C:\3.docx"); }