2 Stimmen

Dateiverschlüsselung in WinRT

Ich arbeite derzeit an einer Metro-Anwendung (C#/XAML), die eine Dateiverschlüsselung erfordert. In Winforms und WPF muss ich dazu nur Folgendes schreiben

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

Wie kann ich dasselbe in WinRT machen?

4voto

Security Hound Punkte 2508

Erstens würde ich niemals System.IO.File.Encrypt verwenden, um eine Datei zu verschlüsseln.
Zweitens würde ich mir die folgende Dokumentation ansehen: Windows Runtime API
Drittens würde ich die Datei mit einem ähnlichen Verfahren verschlüsseln, das hier und hier beschrieben ist.

public MainWindow()
{
   InitializeComponent();

   byte[] encryptedPassword;

   // Erstellen einer neuen Instanz der RijndaelManaged
   // Klasse. Dadurch wird ein neuer Schlüssel und ein Initialisierungsvektor (IV) generiert.
   using (var algorithm = new RijndaelManaged())
   {
      algorithm.KeySize = 256;
      algorithm.BlockSize = 128;

      // Verschlüsseln des Strings in ein Byte-Array.
      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);
}

1voto

Ben Voigt Punkte 268424

Meines Verständnisses nach ist WinRT für Anwendungen konzipiert, die in einer Sandbox ausgeführt werden und keinen direkten Dateizugriff haben.

Für den direkten Dateizugriff benötigen Sie wahrscheinlich einen Nicht-WinRT-Dienst (z. B. Win32 / .NET Desktop-API) und die WinRT-Anwendung muss mit dem Dienst kommunizieren.

0voto

linuxuser27 Punkte 6883

Leider wird dies in WinRT etwas mehr Arbeit erfordern. Da die meisten Funktionen asynchron sind, benötigen Sie etwas mehr Boilerplate und werden mit Streams und IBuffers anstelle von Dateien direkt arbeiten. Die Kryptoklassen befinden sich im Windows.Security.Cryptography Namespace.

Ein Beispiel mit einem IBuffer finden Sie hier.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X