我目前正在開發一個需要文件加密的城域應用程序(C#/ XAML)。 在WinForms和WPF的,我只需要編寫WinRT中的文件加密
System.IO.File.Encrypt("file.txt");
如何做相同的WinRT的?
我目前正在開發一個需要文件加密的城域應用程序(C#/ XAML)。 在WinForms和WPF的,我只需要編寫WinRT中的文件加密
System.IO.File.Encrypt("file.txt");
如何做相同的WinRT的?
據我所知,WinRT是爲在沙箱中運行並且沒有直接文件系統訪問的應用程序而設計的。
您可能需要一個非WinRT(例如Win32/.NET桌面API)服務才能進行直接文件系統訪問,並讓WinRT應用程序與該服務進行通信。
不幸的是,這需要在WinRT中做更多的工作。由於大多數功能都是異步的,因此您需要更多的鍋爐板,並且您將在流和IBuffer
s上運行,而不是直接運行文件。加密類位於Windows.Security.Cryptography
名稱空間中。
一個IBuffer
的例子可以找到here。
首先,我絕對不會使用System.IO.File.Encrypt來加密文件。
其次,我會看看下列文件:Windows Runtime API
三我會使用類似的mehod描述here和here
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);
}
@ Kip9000 - 您的一些代碼更改無效,實際上更改了代碼。您的更改沒有改善任何內容,不確定更改的目的,格式是否正常。 –
已將代碼格式化以使其不會顯示滾動條。更改了代碼以刪除長文件路徑,因爲它們是多餘的。長文件路徑不會向代碼中添加任何內容,也不會使其難以閱讀。 – Indy9000
@ Kip9000 - 我不認爲它們是多餘的,我不同意這種改變。我寧願刪除答案,然後讓它改變。 –
這不會與文件系統以任何方式集成加密的文件,例如多用戶訪問,如果密碼被強制更改則撤銷訪問,並且恢復證書不起作用。 –
這是真的,但OP沒有提到需要集成文件系統加密,只是對文件進行加密。這可以使用上述的API。您的文章確實提到了使用服務來訪問文件系統,這是公平的,並且如果文件系統集成是一項要求,則是正確的選擇。 – linuxuser27
我想我解釋爲「使用相同的」作爲使用EFS的要求。 –