Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WinRT中的文件加密_C#_Windows 8_Windows Runtime - Fatal编程技术网

C# WinRT中的文件加密

C# WinRT中的文件加密,c#,windows-8,windows-runtime,C#,Windows 8,Windows Runtime,我目前正在开发一个需要文件加密的metro应用程序(C#/XAML)。 在Winforms和WPF中,我只需要编写 System.IO.File.Encrypt("file.txt"); 如何在WinRT中实现同样的功能?不幸的是,这需要在WinRT中做更多的工作。由于大多数函数都是异步的,您需要更多的锅炉板,并且您将在流和IBuffers上操作,而不是直接在文件上操作。加密类位于命名空间中 可以找到一个带有IBuffer的示例。据我所知,WinRT是为在沙箱中运行且没有直接文件系统访问的应用

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

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

如何在WinRT中实现同样的功能?

不幸的是,这需要在WinRT中做更多的工作。由于大多数函数都是异步的,您需要更多的锅炉板,并且您将在流和
IBuffer
s上操作,而不是直接在文件上操作。加密类位于命名空间中


可以找到一个带有
IBuffer
的示例。

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


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

首先,我永远不会使用System.IO.File.Encrypt来加密文件。
其次,我要看一下以下文档:
第三,我将使用类似的方法对文件进行加密


这不会以任何方式与文件系统集成,例如,多用户访问、强制更改密码时撤销访问以及恢复证书都不会工作。这是真的,但OP没有提到需要集成文件系统加密,只是需要对文件进行加密。这可以使用前面提到的API实现。您的帖子确实提到了使用服务访问文件系统,这是公平的,如果文件系统集成是一项要求,那么这是正确的选择。我想我把“做同样的事情”理解为使用EFS的要求。@Kip9000-您的一些代码更改是无效的,并且实际上更改了代码。您的更改没有改善任何东西,不确定更改的目的,格式设置很好。代码的格式设置使其适合,而滚动条不可见。更改代码以删除长文件路径,因为它们是多余的。长文件路径只会使代码更难阅读,不会给代码增加任何内容。@Kip9000-我不认为它们是多余的,我不同意更改。我宁愿删除答案,然后允许更改。如果您对更改有强烈的感觉,请按您的意愿执行。:)
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);
}