C# eine XML-Datei Verschlüsseln
Brauche ich zwei Methoden zum verschlüsseln und einer zum entschlüsseln einer xml-Datei mit einem key= "hello world",die key-Hallo Welt, sollten verwendet werden zum verschlüsseln und entschlüsseln der xml-Datei.Sollten diese Methoden arbeiten auf allen Maschinen!!! Alle Methoden der Verschlüsselung zu tun. XML-Datei Inhalt unten:
<root>
<lic>
<number>19834209</number>
<expiry>02/02/2002</expiry>
</lic>
</root>
Kann einige geben Sie mir ein Beispiel?Das Problem ist das msdn-Beispiel encyptions eine xml-Datei encypted aber wenn ich entschlüsseln auf einem anderen Rechner funktioniert es nicht.Zum Beispiel
Habe ich versucht, dieses Beispiel:
Gewusst wie: Verschlüsseln Sie XML-Elemente mit Asymmetrischen Schlüsseln,
aber hier gibt es einige ein bisschen session und auf einer anderen Maschine es sagt falsche Daten phewf!
- Poste bitte ein kurzes Beispiel von deinem code, und was genau nicht funktioniert (z.B. 'Auf der Linie 12 erhalte ich eine compilor Fehler 12345' oder 'während der Laufzeit erhalte ich eine SecurityException auf der Linie, 15').
- schlechte Daten thown durch Verschlüsselung der Klasse ah gut
- Brauchen Sie, um die Daten zu verschlüsseln, um es zu verstecken, oder einfach nur Schutz der Daten vor änderungen?
- Ich brauche, um zu verschlüsseln, die die gesamte Datei, so dass die Leute nicht die Schraube.
- Verhindern, dass Menschen die Verschraubung mit der es passen würde, in den "Schutz der Daten vor änderungen" - Idee. Jedenfalls, wenn Sie die Verschlüsselung der kompletten Datei, stellen Sie sicher, dass Sie nicht die Einbettung der Schlüssel, den Sie zum verschlüsseln der Daten in Ihrem Programm, oder es ist free-for-all (mit Reflektor) wissen.
- Nun habe ich ein Schema gemacht, teilweise,ich bin immer irgendwo,alle Systeme sind ziemlich nutzlos durch das patchen zu umgehen Mechanismus.hashes finde ich sind ein bisschen mehr nützlich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, dass der gleiche Schlüssel für Verschlüsselung und Entschlüsselung verwenden Sie eine symmetrische Methode, (das ist die definition, wirklich). Hier ist die nächste, die zu Ihrer Probe (gleiche Quelle).
http://msdn.microsoft.com/en-us/library/sb7w85t6.aspx
Gepostete Beispiel funktioniert nicht, weil Sie nicht mit den gleichen Tasten. Nicht nur auf verschiedenen Rechnern: das Programm läuft auf der gleichen Maschine doppelt sollte das nicht funktionieren (hat bei mir nicht funktioniert), denn Sie nutzen die verschiedenen zufälligen Schlüssel jedes mal.
versuchen Sie, diesen code nach der Erstellung Ihrer Schlüssel:
Nun das Programm mit dem gleichen Schlüssel und Initialisierungs-Vektor, und Verschlüsseln und Entschlüsseln sollte auf allen Maschinen.
Bedenken Sie auch, Umbenennung
key
zualgorithm
, ansonsten ist dies sehr irreführend. Ich würde sagen, es ist eine schlechte, nicht-arbeiten-auch-Beispiel aus der MSDN-Website.HINWEIS:
PasswordDeriveBytes.GetBytes()
verworfen wurde, weil der ernsthafte (Sicherheits -) Probleme in derPasswordDeriveBytes
Klasse. Der obige code wurde neu geschrieben, um die sichererRfc2898DeriveBytes
Klasse statt (PBKDF2 statt PBKDF1). Generierten Code mit der oben mit Hilfe vonPasswordDeriveBytes
beeinträchtigt werden kann.Siehe auch: Empfohlene Anzahl der Iterationen bei Verwendung PKBDF2-SHA256?
Rfc2898DeriveBytes
, aber ich habe einen link, der beantwortet diese Frage (nicht numerisch, leider). Der Standardwert ist 1000.Rfc2898DeriveBytes
- sieht das ok?byte[] password, byte[] salt, int iterations
Konstruktor (die iteration count fehlte in der Antwort bearbeitet). Problem ist, dass mit der API ist es unmöglich zu wissen, die Zeichen-Kodierung für das Passwort, Salz. Das gleiche gilt für die Standard-iteration-count. Für jede Art von Interoperabilität (vielleicht sogar zwischen zwei verschiedenen .NET-runtimes) mit den anderen Konstruktoren ist gefährlich, am besten.Wäre cooler, wenn Sie einen privaten Schlüssel zum signieren der <lic> - element und das Ergebnis addiert, um die Datei (in einem <hash> - element vielleicht). Das würde es vielleicht für alle zum Lesen der xml-Datei, falls Ihr Unterstützung braucht, um zu wissen, die Lizenz-Nummer, oder das Datum der Ablauf, aber Sie können nicht ändern Sie alle Werte ohne den privaten Schlüssel.
Den öffentlichen Schlüssel benötigt, um die Signatur zu überprüfen wäre allgemein bekannt.
Klärung
Signieren Sie Ihren code nur als Schutz vor änderungen, es wird nicht halten Sie alle Informationen in Ihr verborgen. Deiner ursprünglichen Frage erwähnt Verschlüsselung, aber ich bin nicht sicher, dass es eine Anforderung zum verbergen der Daten, oder einfach nur vor änderungen zu schützen.
Beispiel-code: (Nie veröffentlichen PrivateKey.Schlüssel. ServerMethods sind nur erforderlich, wenn die Unterzeichnung der xml-Datei, ClientMethods sind nur dann erforderlich, wenn die überprüfung der xml-Datei).
Zuerst, wenn Sie möchten, verwenden Sie den gleichen Schlüssel zum ver-und entschlüsseln, sollten Sie schauen, symmetrischen Kryptographie. Die asymmetrische Kryptographie ist, wenn der Schlüssel für das verschlüsseln und entschlüsseln sind unterschiedlich. Nur damit Sie wissen - RSA asymmetrisch, TripleDES und Rijndael sind symmetrisch. Es gibt auch andere, aber .NET, die keine default-Implementierungen für Sie.
Empfehle ich das Studium der
System.Security.Cryptography namespace
. Und das lernen ein bisschen über all das Zeug. Es hat alles, was Sie zum verschlüsseln und entschlüsseln von Dateien sowie ein Kennwort generiert. Insbesondere, Sie interessiert sein könnten in den folgenden Klassen:CryptoStream
PasswordDeriveBytes
RijndaelManaged
Gibt es auch Beispiele für die Nutzung von MSDN-für jeden von Ihnen. Sie können diese Klassen verwenden, um zu verschlüsseln jede Datei, nicht nur XML. Wenn jedoch Sie verschlüsseln möchten, nur wählen Sie einige Elemente, können Sie einen Blick auf
System.Security.Cryptography.Xml
namespace. Ich sehe, Sie haben schon einen Artikel darüber. Folgen Sie den links auf dieser Seite und erfahren Sie mehr über diese Klassen.dies ist, wie Sie Digital signieren und überprüfen von XML-Dokumenten Signieren von XML-Dokumenten