57 lines
2.1 KiB
C#
57 lines
2.1 KiB
C#
|
|
using System.IO;
|
||
|
|
using System.Text;
|
||
|
|
using System.Security.Cryptography;
|
||
|
|
using UnityEngine;
|
||
|
|
|
||
|
|
namespace Comgreate
|
||
|
|
{
|
||
|
|
public class AESForFileKit
|
||
|
|
{
|
||
|
|
private static readonly byte[] Salt = Encoding.UTF8.GetBytes("Sgfsads");
|
||
|
|
|
||
|
|
|
||
|
|
private const int Iterations = 1000;
|
||
|
|
|
||
|
|
|
||
|
|
public static void EncryptFile(string inputPath, string outputPath, string password)
|
||
|
|
{
|
||
|
|
var passwordBytes = Encoding.UTF8.GetBytes(password);
|
||
|
|
var inputStream = new FileStream(inputPath, FileMode.Open, FileAccess.Read);
|
||
|
|
var outputStream = new FileStream(outputPath, FileMode.Create, FileAccess.Write);
|
||
|
|
|
||
|
|
using var aes = new AesManaged();
|
||
|
|
var key = new Rfc2898DeriveBytes(passwordBytes, Salt, Iterations);
|
||
|
|
aes.Key = key.GetBytes(aes.KeySize / 8);
|
||
|
|
aes.IV = key.GetBytes(aes.BlockSize / 8);
|
||
|
|
using var cryptoStream = new CryptoStream(outputStream, aes.CreateEncryptor(), CryptoStreamMode.Write);
|
||
|
|
inputStream.CopyTo(cryptoStream);
|
||
|
|
cryptoStream.FlushFinalBlock();
|
||
|
|
cryptoStream.Close();
|
||
|
|
outputStream.Close();
|
||
|
|
inputStream.Close();
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public static byte[] DecryptToBytes(string inputPath, string password, out int dataSize)
|
||
|
|
{
|
||
|
|
var passwordBytes = Encoding.UTF8.GetBytes(password);
|
||
|
|
var inputStream = new FileStream(inputPath, FileMode.Open, FileAccess.Read);
|
||
|
|
var outputMemoryStream = new MemoryStream();
|
||
|
|
|
||
|
|
using (var aes = new AesManaged())
|
||
|
|
{
|
||
|
|
var key = new Rfc2898DeriveBytes(passwordBytes, Salt, Iterations);
|
||
|
|
aes.Key = key.GetBytes(aes.KeySize / 8);
|
||
|
|
aes.IV = key.GetBytes(aes.BlockSize / 8);
|
||
|
|
using (var cryptoStream = new CryptoStream(inputStream, aes.CreateDecryptor(), CryptoStreamMode.Read))
|
||
|
|
{
|
||
|
|
cryptoStream.CopyTo(outputMemoryStream);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
var outputBytes = outputMemoryStream.ToArray();
|
||
|
|
dataSize = outputBytes.Length;
|
||
|
|
return outputBytes;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|