.net aes加密视频等文件

时间:2023-03-09 09:00:55
.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 = ; // Recommendation is >= 1000
static byte[] GetBytes(string str)
{
var bytes = new byte[str.Length * sizeof(char)];
Buffer.BlockCopy(str.ToCharArray(), , bytes, , 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 = ;
aes.KeySize = ;
var salt = GetBytes(SaltKey);
var key = new Rfc2898DeriveBytes(SKey, salt, Iterations);
aes.Key = key.GetBytes(aes.KeySize / );
aes.IV = key.GetBytes(aes.BlockSize / );
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 = ;
aes.KeySize = ;
var salt = GetBytes(SaltKey);
var key = new Rfc2898DeriveBytes(SKey, salt, Iterations);
aes.Key = key.GetBytes(aes.KeySize / );
aes.IV = key.GetBytes(aes.BlockSize / );
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"); }