ASP.NET - 加密文件
创始人
2024-11-11 20:00:39
0

在ASP.NET中加密文件有多种方式,以下是一种解决方法的代码示例:

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

public class FileEncryption
{
    public static void EncryptFile(string inputFile, string outputFile, string password)
    {
        byte[] salt = GenerateSalt();
        byte[] passwordBytes = Encoding.UTF8.GetBytes(password);

        using (FileStream fsInput = new FileStream(inputFile, FileMode.Open))
        using (FileStream fsOutput = new FileStream(outputFile, FileMode.Create))
        {
            using (RijndaelManaged aes = new RijndaelManaged())
            {
                aes.KeySize = 256;
                aes.BlockSize = 128;
                aes.Padding = PaddingMode.PKCS7;

                byte[] key = new Rfc2898DeriveBytes(passwordBytes, salt, 1000).GetBytes(aes.KeySize / 8);
                aes.Key = key;
                aes.IV = new Rfc2898DeriveBytes(passwordBytes, salt).GetBytes(aes.BlockSize / 8);

                fsOutput.Write(salt, 0, salt.Length);

                using (CryptoStream cs = new CryptoStream(fsOutput, aes.CreateEncryptor(), CryptoStreamMode.Write))
                {
                    byte[] buffer = new byte[4096];
                    int bytesRead;

                    while ((bytesRead = fsInput.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        cs.Write(buffer, 0, bytesRead);
                    }
                }
            }
        }
    }

    public static void DecryptFile(string inputFile, string outputFile, string password)
    {
        byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
        byte[] salt = new byte[32];

        using (FileStream fsInput = new FileStream(inputFile, FileMode.Open))
        using (FileStream fsOutput = new FileStream(outputFile, FileMode.Create))
        {
            fsInput.Read(salt, 0, salt.Length);

            using (RijndaelManaged aes = new RijndaelManaged())
            {
                aes.KeySize = 256;
                aes.BlockSize = 128;
                aes.Padding = PaddingMode.PKCS7;

                byte[] key = new Rfc2898DeriveBytes(passwordBytes, salt, 1000).GetBytes(aes.KeySize / 8);
                aes.Key = key;
                aes.IV = new Rfc2898DeriveBytes(passwordBytes, salt).GetBytes(aes.BlockSize / 8);

                using (CryptoStream cs = new CryptoStream(fsOutput, aes.CreateDecryptor(), CryptoStreamMode.Write))
                {
                    byte[] buffer = new byte[4096];
                    int bytesRead;

                    while ((bytesRead = fsInput.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        cs.Write(buffer, 0, bytesRead);
                    }
                }
            }
        }
    }

    private static byte[] GenerateSalt()
    {
        byte[] salt = new byte[32];

        using (RNGCryptoServiceProvider rngCsp = new RNGCryptoServiceProvider())
        {
            rngCsp.GetBytes(salt);
        }

        return salt;
    }
}

使用示例:

string inputFile = "path/to/input/file";
string encryptedFile = "path/to/encrypted/file";
string decryptedFile = "path/to/decrypted/file";
string password = "your-password";

FileEncryption.EncryptFile(inputFile, encryptedFile, password);
FileEncryption.DecryptFile(encryptedFile, decryptedFile, password);

请注意,此示例使用Rijndael算法进行文件加密和解密,并采用PBKDF2(基于RFC 2898)来生成密钥和初始化向量。

相关内容

热门资讯

七分钟辅助!丽水茶苑苹果手机辅... 七分钟辅助!丽水茶苑苹果手机辅助,本来是真的有辅助教程(有挂方式)1、实时丽水茶苑苹果手机辅助透视辅...
第一分钟辅助!闲来辅助神器下载... 第一分钟辅助!闲来辅助神器下载2022,好像真的有辅助方法(有挂教程)1、不需要AI权限,帮助你快速...
九分钟辅助!丽水都莱辅助工具试... 九分钟辅助!丽水都莱辅助工具试用,确实存在有辅助神器(有挂方法)九分钟辅助!丽水都莱辅助工具试用,确...
第一分钟辅助!蛮王辅助器,好像... 第一分钟辅助!蛮王辅助器,好像是有辅助方法(有挂教学)1、首先打开蛮王辅助器辅助器下载最新版本,在蛮...
第六分钟辅助!潮汕汇挂,一贯真... 第六分钟辅助!潮汕汇挂,一贯真的是有辅助插件(有挂辅助)1、这是跨平台的潮汕汇挂轻量版有透视,在线的...
六分钟辅助!微信开心泉州辅助器... 六分钟辅助!微信开心泉州辅助器,一直有辅助器(有挂教学)1、下载好微信开心泉州辅助器透视辅助下载之后...
第3分钟辅助!佛手十三道破解版... 第3分钟辅助!佛手十三道破解版安卓,竟然真的有辅助攻略(有挂存在)1、让任何用户在无需佛手十三道破解...
2分钟辅助!sohoo竞技联盟... 2分钟辅助!sohoo竞技联盟辅助,切实真的有辅助脚本(有挂技术)1.sohoo竞技联盟辅助 选牌创...
第8分钟辅助!心悦手游辅助器,... 第8分钟辅助!心悦手游辅助器,原来真的是有辅助技巧(确实有挂);1、每一步都需要思考,不同水平的挑战...
第十分钟辅助!广东雀神祈福真的... 第十分钟辅助!广东雀神祈福真的有用吗,都是是有辅助技巧(有挂方略)1、下载好广东雀神祈福真的有用吗透...