2

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

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

如何在 WinRT 中做同样的事情?

4

3 回答 3

4

首先,我永远不会使用 System.IO.File.Encrypt 来加密文件。
其次,我将查看以下文档:Windows Runtime API第三,我将使用此处此处
描述的类似方法加密文件

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);
}
于 2012-05-03T16:48:42.607 回答
1

据我了解,WinRT 专为在沙箱中运行且无法直接访问文件系统的应用程序而设计。

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

于 2012-05-03T16:37:08.720 回答
0

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

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

于 2012-05-03T16:35:11.207 回答