xml Datei verschlüsseln

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Michdi.

    Nuja, mir fallen 2 Möglichkeiten ein:
    1. Du benutzt zum Abspeichern Deiner XML nen BinaryFormatter, damit niemand den Klartext in der Datei lesen kann. Dabei geh ich davon aus, dass Du Deine Daten in einer mit <SerializableAttribute> markierten Klasse hast.
    2. Du verschlüsselst Deine fertige XML-Datei quasi per Hand und entschlüsselst sie beim Laden wieder, bevor Du Deine XML-Ladefunktion verwendest.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    manni4545 schrieb:

    in einem anderen Format
    z.B. Binary.
    Wenn Du eine serialisierbare Klasse machst und dort als Properties Deine Daten reinpackst, kannst Du sie nach belieben speichern: XML, binär, crypto.
    Das sollte reichen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich verwende gerne cCrypt zum schlüsseln von Strings. Ich bin mir nicht ganz sicher inwiefern man jetzt xml zu string konvertieren kann, aber an sich ist ja alles nur Text.

    VB.NET-Quellcode

    1. Public Class cCrypt
    2. #Region "Zustandsvariablen"
    3. Private EncryptedString_ As String
    4. Private DecryptedString_ As String
    5. #End Region
    6. Public Sub New()
    7. End Sub
    8. #Region "Methoden"
    9. ' Verschlüsseln
    10. Public Sub Encrypt(ByVal AESKeySize As Int32,
    11. ByVal DecryptedString As String,
    12. ByVal Password As String)
    13. ' Der Salt-Wert ist eine zufällig gewählte Zeichenfolge,
    14. ' wenn man so will ein zweites Passwort.
    15. ' Nur wer den Salt-Wert und das Passwort kennt,
    16. ' kann entschlüsseln.
    17. ' Durch Verwendung eines Salt-Wertes ist es deutlich
    18. ' schwerer das Passwort zu knacken.
    19. ' Wird das Passwort selber zur Erstellung des Salt-Wertes
    20. ' verwendet, muss dieses mindestens 8 Zeichen haben.
    21. Dim Salt() As Byte
    22. Salt = System.Text.Encoding.UTF8.GetBytes(
    23. "DEIN_SALT_WERT")
    24. ' Mit Hilfe des Passwortes und des Salt wird ein Key (Hash-Wert)
    25. ' generiert, der später zur Initialisierung des
    26. ' AES-Algorithmus verwendt wird.
    27. Dim GenerierterKey As New Rfc2898DeriveBytes(Password, Salt)
    28. ' Instanzierung des AES-Algorithmus-Objekts mit 256-bit
    29. ' oder 128-bit Schlüssel und 128-bit Block-Size
    30. Dim AES As New AesManaged
    31. AES.KeySize = AESKeySize ' möglich sind 256 oder 128 bit
    32. AES.BlockSize = 128
    33. ' Algorithmus initialisieren:
    34. AES.Key = GenerierterKey.GetBytes(AES.KeySize \ 8)
    35. AES.IV = GenerierterKey.GetBytes(AES.BlockSize \ 8)
    36. ' Memory-Stream und Crypto-Stream erzeugen -> CreateEncryptor()
    37. Dim ms As New IO.MemoryStream
    38. Dim cs As New CryptoStream(ms, AES.CreateEncryptor(),
    39. CryptoStreamMode.Write)
    40. ' Daten verschlüsseln:
    41. Dim Data() As Byte
    42. Data = System.Text.Encoding.UTF8.GetBytes(DecryptedString)
    43. cs.Write(Data, 0, Data.Length)
    44. cs.FlushFinalBlock()
    45. cs.Close()
    46. ' Verschlüsselte Daten als String ausgeben:
    47. EncryptedString_ = Convert.ToBase64String(ms.ToArray)
    48. ms.Close()
    49. AES.Clear()
    50. End Sub
    51. ' Entschlüsseln
    52. Public Sub Decrypt(ByVal AESKeySize As Int32,
    53. ByVal EncryptedString As String,
    54. ByVal Password As String)
    55. ' Der Salt-Wert und das Passwort müssen mit dem übereinstimmen,
    56. ' das bei der Verschlüsselung verwendet wurde:
    57. Dim Salt() As Byte
    58. Salt = System.Text.Encoding.UTF8.GetBytes(
    59. "DEIN_SALT_WERT")
    60. Dim GenerierterKey As New Rfc2898DeriveBytes(Password, Salt)
    61. ' Instanzierung des AES-Algorithmus-Objekts:
    62. Dim AES As New AesManaged
    63. ' Ein mit 256 bit verschlüsselter String kann
    64. ' auch nur mit 256 bit entschlüsselt werden!
    65. AES.KeySize = AESKeySize ' möglich sind 256 oder 128 bit
    66. AES.BlockSize = 128
    67. ' Algorithmus initialisieren:
    68. AES.Key = GenerierterKey.GetBytes(AES.KeySize \ 8)
    69. AES.IV = GenerierterKey.GetBytes(AES.BlockSize \ 8)
    70. ' Memory-Stream und Crypto-Stream erzeugen -> CreateDecryptor()
    71. Dim ms As New IO.MemoryStream
    72. Dim cs As New CryptoStream(ms, AES.CreateDecryptor(),
    73. CryptoStreamMode.Write)
    74. Try ' Daten entschlüsseln:
    75. Dim Data() As Byte
    76. Data = Convert.FromBase64String(EncryptedString)
    77. cs.Write(Data, 0, Data.Length)
    78. cs.FlushFinalBlock()
    79. cs.Close()
    80. ' Die entschlüsselten Daten als String ausgeben:
    81. DecryptedString_ = System.Text.Encoding.UTF8.GetString(ms.ToArray)
    82. ms.Close()
    83. AES.Clear()
    84. Catch ex As Exception
    85. DecryptedString_ = "Error at encryption"
    86. End Try
    87. End Sub
    88. #End Region
    89. #Region "Eigenschaften"
    90. ReadOnly Property EncryptedString() As String
    91. Get
    92. Return EncryptedString_
    93. End Get
    94. End Property
    95. ReadOnly Property DecryptedString() As String
    96. Get
    97. Return DecryptedString_
    98. End Get
    99. End Property
    100. #End Region
    101. End Class


    Ich meine die Quelle war vbarchiv.net

    VB.NET-Quellcode

    1. Dim cCrypt As cCrypt = New cCrypt
    2. Dim pass As String = "DEIN_PASSWORT_ZUM_VERSCHLÜSSELN"
    3. 'Und dann im Sub
    4. 'Entschlüsseln
    5. cCrypt.Decrypt(256, "DIES SOLL ENTSCHLÜSSELT WERDEN", pass)
    6. msgbox(cCrypt.DecryptedString)
    7. 'Verschlüsseln
    8. cCrypt.Encrypt(256, "DIES SOLL VERSCHLÜSSELT WERDEN", pass)
    9. msgbox(cCrypt.EncryptedString



    Ich hoffe, dass ich irgendwie helfen konnte! Man sollte aber bedenken, dass der Salt und das Passwort jederzeit ausgelesen werden können.
    Die beste maschinelle Übersetzung der Welt - DeepL Übersetzer
    Alle Zitate, die ich seit dem 1.9.2017 übersetzt habe, wurden vollautomatisch mit DeepL übersetzt.



    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Michdi“ ()