WinRT 中的文件加密

本文关键字:加密 文件 WinRT | 更新日期: 2023-09-27 18:32:59

我目前正在开发一个需要文件加密的地铁应用程序(C#/XAML)。在Winforms和WPF中,我只需要写

System.IO.File.Encrypt("file.txt");

如何在 WinRT 中执行相同的操作?

WinRT 中的文件加密

首先,我永远不会使用System.IO.File.Encrypt来加密文件。
其次,我会看一下以下文档:Windows Runtime API
第三,我会在这里和这里
使用类似的mehod描述来加密文件

public MainWindow()
{
   InitializeComponent();
   byte[] encryptedPassword;
   // Create a new instance of the RijndaelManaged
   // class.  This generates a new key and initialization 
   // vector (IV).
   using (var algorithm = new RijndaelManaged())
   {
      algorithm.KeySize = 256;
      algorithm.BlockSize = 128;
      // Encrypt the string to an array of bytes.
      encryptedPassword = Cryptology.EncryptStringToBytes("Password", 
                                                    algorithm.Key, algorithm.IV);
   }
   string chars = encryptedPassword.Aggregate(string.Empty, 
                                         (current, b) => current + b.ToString());
Cryptology.EncryptFile(@"C:'Users'Ira'Downloads'test.txt", @"C:'Users'Ira'Downloads'encrypted_test.txt", chars);
Cryptology.DecryptFile(@"C:'Users'Ira'Downloads'encrypted_test.txt", @"C:'Users'Ira'Downloads'unencyrpted_test.txt", chars);
}

据我了解,WinRT 是为在沙箱中运行且没有直接文件系统访问权限的应用程序而设计的。

您可能需要非 WinRT(例如 Win32/.NET 桌面 API)服务来直接访问文件系统,并让 WinRT 应用程序与该服务通信。

不幸的是,

这将需要在 WinRT 中进行更多工作。 由于大多数函数都是异步的,因此您将需要更多的样板文件,并且您将在流和IBuffer上进行操作,而不是直接对文件进行操作。 加密类位于 Windows.Security.Cryptography 命名空间中。

可以在此处找到带有IBuffer的示例。