c# - 如何验证文件的 AesManaged 加密
问题描述
我使用 AesManaged/CryptoStream 根据密码加密文件。
public static void EncryptStream(Stream streamToEncrypt, Stream outPutStream, string password)
{
SaltAndKey saltAndKey = PasswordAsByte(password);
// writes salt
outPutStream.Write(saltAndKey.SaltAsBytes, 0, SaltLenght);
using (AesManaged aesAlg = new AesManaged())
{
aesAlg.Mode = AesCipherMode; //CBC
aesAlg.Key = saltAndKey.KeyAsBytes;
// writes vector
outPutStream.Write(aesAlg.IV, 0, IvLenght);
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (CryptoStream csEncrypt = new CryptoStream(outPutStream, encryptor, CryptoStreamMode.Write))
{
int data;
data = streamToEncrypt.ReadByte();
while ((data > -1))
{
csEncrypt.WriteByte(System.Convert.ToByte(data));
data = streamToEncrypt.ReadByte();
}
if (csEncrypt.HasFlushedFinalBlock)
csEncrypt.FlushFinalBlock();
}
}
}
这有效,我能够毫无问题地解密文件。
我现在需要检测加密文件是否被更改。一种方法是解密整个文件,但要检查大量文件,这是一项相当昂贵的操作。
有没有其他方法可以验证我能够在不实际解密的情况下解密文件?
解决方案
推荐阅读
- console - 尝试在 MMC 控制台中生成 CSR 时出现错误“'未定义提供程序类型'
- css - Bootstrap 移动背景图片
- javascript - Highcharts:以自定义布局将多个图表导出为 pdf
- winrt-xaml - 如果计时器停止或重新加载 UI,后台线程会发生什么情况 c++ winrt
- c - 验证输入进入无限循环
- firebase - Flutter/Firebase - firebase 中预定义用户的身份验证(电话身份验证)
- c++ - 用于 3D 建模和游戏控制程序的 C++ 项目类型
- javascript - 如何使用 jquery 和缩放(css)放大/缩小每个 div 中的每个图像?
- ngrx - 我们可以将 NgRx 数据与分页样式的 REST API 响应一起使用吗?
- javascript - 我正在尝试将变量的值分配给“数据索引”属性