C # Eine XML-Datei verschlüsseln

7

Ich brauche zwei Methoden zum Verschlüsseln und Entschlüsseln einer XML-Datei mit einem Schlüssel="Hallo Welt", der Schlüssel Hallo Welt sollte verwendet werden, um die XML-Datei zu verschlüsseln und zu entschlüsseln.Diese Methoden sollten auf allen Maschinen funktionieren !! ! Alle Verschlüsselungsmethoden reichen aus. XML Datei Inhalt unten:

%Vor%

Kann mir jemand ein Beispiel geben? Das Problem ist das msdn-Beispiel enceptions machen eine xml-Datei verschlüsselt, aber wenn ich auf einem anderen Computer entschlüssle, funktioniert es nicht. Zum Beispiel

Ich habe dieses Beispiel ausprobiert: Vorgehensweise: Verschlüsseln von XML-Elementen mit asymmetrischen Schlüsseln aber hier gibt es irgendeine Art von Sitzung und auf einer anderen Maschine sagt es schlechte Daten pueff!

    
abmv 06.07.2009, 08:46
quelle

4 Antworten

13

Wenn Sie den gleichen Schlüssel zum Verschlüsseln und Entschlüsseln möchten, sollten Sie eine symmetrische Methode verwenden (das ist die Definition). Hier ist der nächste zu Ihrer Probe (gleiche Quelle). Ссылка

Das gepostete Beispiel funktioniert nicht, weil es nicht die gleichen Schlüssel verwendet. Nicht nur auf verschiedenen Rechnern: Das Programm zweimal auf der gleichen Maschine laufen zu lassen, sollte auch nicht funktionieren (funktionierte nicht für mich), weil sie jedes Mal verschiedene zufällige Schlüssel verwenden.
Versuchen Sie, diesen Code nach dem Erstellen Ihres Schlüssels hinzuzufügen:

%Vor%

Jetzt verwendet das Programm den gleichen Schlüssel und den Anfangsvektor, und Encrypt and Decrypt sollte auf allen Maschinen funktionieren.
Denken Sie auch daran, key in algorithm umzubenennen, da dies sonst sehr irreführend ist. Ich würde sagen, es ist ein schlechtes, nicht funktionierendes Beispiel von MSDN.

HINWEIS: : PasswordDeriveBytes.GetBytes() wurde aufgrund schwerwiegender (Sicherheits) Probleme innerhalb der PasswordDeriveBytes Klasse. Der obige Code wurde neu geschrieben, um stattdessen die sicherere Klasse Rfc2898DeriveBytes (PBKDF2 anstelle von PBKDF1) zu verwenden. Code, der mit obigem unter Verwendung von PasswordDeriveBytes generiert wurde, kann kompromittiert werden.

Siehe auch: Empfohlene Anzahl von Iterationen bei Verwendung von PKBDF2-SHA256?

    
Kobi 06.07.2009, 08:49
quelle
4

Wäre cooler, wenn Sie einen privaten Schlüssel zum Signieren des & lt; lic & gt; Element und fügte das Ergebnis der Datei hinzu (vielleicht in einem & lt; hash & gt; -Element). Dies würde es jedem ermöglichen, die XML-Datei zu lesen, falls Ihr Support die Lizenznummer oder das Ablaufdatum wissen muss, aber sie können keine Werte ohne den privaten Schlüssel ändern.

Der öffentliche Schlüssel, der zur Überprüfung der Signatur benötigt wird, ist allgemein bekannt.

Erläuterung
Wenn Sie Ihren Code signieren, wird er nur vor Änderungen geschützt, und versteckte Informationen werden nicht gespeichert. Ihre ursprüngliche Frage erwähnt Verschlüsselung, aber ich bin mir nicht sicher, ob es eine Voraussetzung ist, die Daten zu verstecken oder nur vor Änderungen zu schützen.

Beispielcode: (Veröffentlichen Sie PrivateKey.key nie. ServerMethods werden nur benötigt, wenn Sie die XML-Datei signieren, ClientMethods werden nur benötigt, wenn Sie die XML-Datei verifizieren.)

%Vor%     
sisve 06.07.2009 08:51
quelle
3

Wenn Sie zum Verschlüsseln und Entschlüsseln den gleichen Schlüssel verwenden möchten, sollten Sie sich zunächst symmetrische Kryptografie ansehen. Bei der asymmetrischen Kryptographie unterscheiden sich die Schlüssel zum Verschlüsseln und Entschlüsseln. Nur damit Sie wissen - RSA ist asymmetrisch, TripleDES und Rijndael sind symmetrisch. Es gibt auch andere, aber .NET hat keine Standardimplementierungen für sie.

Ich würde empfehlen, die System.Security.Cryptography namespace zu studieren. Und ein bisschen über all das Zeug lernen. Es enthält alles, was Sie zum Verschlüsseln und Entschlüsseln von Dateien benötigen, sowie ein Passwort. Insbesondere könnten Sie an diesen Klassen interessiert sein:

  • CryptoStream
  • PasswordDeriveBytes
  • RijndaelManaged

Es gibt auch Beispiele für die Verwendung in MSDN für jede von ihnen. Sie können diese Klassen verwenden, um jede Datei zu verschlüsseln, nicht nur XML. Wenn Sie jedoch nur einige wenige Elemente verschlüsseln möchten, können Sie sich System.Security.Cryptography.Xml namespace ansehen. Ich sehe, Sie haben bereits einen Artikel darüber gefunden. Folgen Sie den Links auf dieser Seite und Sie werden mehr über diese Klassen erfahren.

    
Vilx- 06.07.2009 09:32
quelle
2

So signieren und verifizieren Sie XML-Dokumente XML-Dokumente signieren

    
Eros 06.07.2009 10:03
quelle

Tags und Links