C# WinRT中的文件加密
我目前正在开发一个需要文件加密的metro应用程序(C#/XAML)。 在Winforms和WPF中,我只需要编写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是为在沙箱中运行且没有直接文件系统访问的应用
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);
}