RSA Verschlüssellung, asymmetrische Verschlüssellung leicht gemacht

    • VB.NET

    Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von noBlubb.

      RSA Verschlüssellung, asymmetrische Verschlüssellung leicht gemacht

      Anders als bei der normalen Verschlüssellung (symmetrische Verschlüssellung), wird nicht der gleiche Schlüssel verwendet um etwas Verschlüsseltes zu entschlüsseln.
      Das bedeutet, dass es zwei Schlüssel gibt. Zum Einen, den öffentlichen Schlüssel, der verwendet wird um zu Verschlüsseln und zum Anderem den privaten Schlüssel, der zum Entschlüsseln benötigt wird.


      Hier ein Modul das folgende Möglichkeiten bietet: Schlüsselgenerierung, RSA Ver- und Entschlüssellung.

      VB.NET-Quellcode

      1. Option Strict On
      2. Imports System.Security.Cryptography
      3. Imports System.Text
      4. Module Crypt
      5. Structure RSA_key_Struct
      6. Dim open_key As String 'Bestehend aus einem öffentlichem
      7. Dim privat_key As String 'und einem privatem Schlüssel, die beide als string im XML-Format ges
      8. End Structure
      9. 'Zufälligen RSA Schlüssel erstellen. Mit einer Schlüssellänge von 2048 als Standartwert
      10. Function Create_RSA_Key(Optional ByVal keysize As Integer = 2048) As RSA_key_Struct
      11. Dim RSA_key As RSA_key_Struct 'RSA_key als RSA_key_Struct Struktur definieren
      12. Dim RSA_Crypto As New RSACryptoServiceProvider(keysize) 'Zufällige Schlüssel generieren
      13. RSA_key.open_key = RSA_Crypto.ToXmlString(False) 'Öffentlichen Schlüssel schreiben
      14. RSA_key.privat_key = RSA_Crypto.ToXmlString(True) 'Privaten Schlüssel schreiben
      15. RSA_Crypto.Dispose() 'Ressourcen freigeben
      16. Return RSA_key 'Schlüssel übergeben
      17. End Function
      18. 'String mit RSA verschlüsseln. Mit einer Schlüssellänge von 2048 als Standartwert. Zum Verschlüsseln wird der öffentliche Schlüssel verwendet
      19. Function RSA_ver(ByVal DATA As String, ByVal Openkey_Xml As String, Optional ByVal keysize As Integer = 2048) As String
      20. Dim RSA_Crypto_ver As New RSACryptoServiceProvider(keysize) 'RSA-service wird deklariert
      21. Dim byte_data As Byte() = UTF8Encoding.UTF8.GetBytes(DATA) 'Daten-String wird in ein byte array geschrieben
      22. Dim Out_String As String = String.Empty 'Ausgangswert wird deklariert
      23. RSA_Crypto_ver.FromXmlString(Openkey_Xml) 'RSA-service erhält den öffentlichen Schlüssel
      24. Out_String = Convert.ToBase64String(RSA_Crypto_ver.Encrypt(byte_data, True)) 'Daten werd verschlüsselt und in einen Base64-String geschrieben
      25. RSA_Crypto_ver.Dispose() 'Ressourcen werden freigeben
      26. Return Out_String 'Verschlüsselte Daten werden übergeben
      27. End Function
      28. 'String mit RSA entschlüsseln. Mit einer Schlüssellänge von 2048 als Standartwert. Zum Entschlüsseln wird der private Schlüssel verwendet
      29. Function RSA_ent(ByVal DATA As String, ByVal Privatekey_Xml As String, Optional ByVal keysize As Integer = 2048) As String
      30. Dim RSA_Crypto_ent As New RSACryptoServiceProvider(keysize) 'RSA-service wird deklariert
      31. Dim byte_data As Byte() = Convert.FromBase64String(DATA) 'Daten-String aus dem Base64-String(!) in ein byte array geschrieben
      32. Dim Out_String As String = String.Empty 'Ausgangswert wird deklariert
      33. RSA_Crypto_ent.FromXmlString(Privatekey_Xml) 'RSA-service erhält den privaten Schlüssel
      34. Out_String = Encoding.Default.GetString(RSA_Crypto_ent.Decrypt(byte_data, True)) 'Daten werden entschlüsselt,in einen und zu einem normalem String geschrieben
      35. RSA_Crypto_ent.Dispose() 'Ressourcen werden freigeben
      36. Return Out_String 'Entschlüsselte Daten werden übergeben
      37. End Function
      38. End Module


      Ein Beispiel Aufruf wäre:

      VB.NET-Quellcode

      1. Sub Schlüssel_erstellen_und_funktion_prüfen()
      2. Dim RSA_key As Crypt.RSA_key_Struct = Crypt.Create_RSA_Key
      3. IO.File.WriteAllText("Öffentlicher_Schlüssel.xml", RSA_key.open_key)
      4. IO.File.WriteAllText("Privater_Schlüssel.xml", RSA_key.privat_key)
      5. Dim plain As String = "Hello World"
      6. Dim crypted As String = Crypt.RSA_ver(plain, RSA_key.open_key)
      7. Dim encrypted As String = Crypt.RSA_ent(crypted, RSA_key.privat_key)
      8. MsgBox("Plain: " & plain)
      9. MsgBox("Crypted: " & crypted)
      10. MsgBox("Encrypted: " & encrypted)
      11. End Sub


      Ich hoffe ihr könnt etwas damit anfangen.

      Grüße Jakob

      Leichengräber^^

      Es tut mir leid das ich die ewige Ruhe dieses Threads stören muss, aber ich interessiere mich durchaus für eine RSA gesicherte Kommunikation von meinem Programm mit meinem Server.
      Da ich nicht zu den glücklichen Leuten gehöre die sich einen eigenen Windowsserver hosten muss ich wohl mit PHP arbeiten ^^

      Genug geredet, ich habe leider ein kleines Verständnisproblem:
      Ich lasse mir vom hier vorgegebenen Code die zwei .xmls ausspucken, einzige Änderung ist das ich die Schlüssellänge von 2048 auf 4096 erhöht habe und .Dispose() durch .Clear() ersetzen musste.
      Hat nicht viel geändert nehme ich an ^^

      Wenn ich jetzt aber die erstellten Dateien so angucke und mit meinem vom PHP erstellten Schlüsselpaar vergleiche, spuckt mir VB hier eine ordentliche XML aus, mein Server aber "nur" eine Zeichenfolge.
      Sind die miteinander kompatibel?

      RSA-KEY vom Server erstellt

      -----BEGIN RSA PRIVATE KEY-----
      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
      -----END RSA PRIVATE KEY-----

      RSA-KEY vom VB.Net Programm erstellt

      <RSAKeyValue><Modulus>
      xzORPcjnQ/jyMKS8FemknISYgRC+QOwmU3FwRmzawLs7YaOEQAtFtCQTnUaQ28eQGAOFu97DoG
      NBeRQaai4Iras1evp+uyaWQHfsrlI/TX0rRF4KR1Mx+bVh916d5kol3TwGonisMAChtYrs4Kqs6ioqOHm
      Zv7G6f8t/UquZ3REKp6ll3Sxbyu1s6YIihZiAqnXsdQ6v552ZRc1v/5k0IQQjAVK6D7Wrceve83mfMlE62
      9yHHqp7Q0hy8f54aY6bQ8fDN4SG5HW7KkZliUzAY1L8rhUZJ/634yOerlmYZNt//Gs+x+n0m+FS25H/E
      O4BA/UrtqTUxsTrckKqWpghZGQsT79rUiW+Qt7WI0bWS9xP4fpwMLK+8mD/KSBqmoYs4vCSzuYFmX
      z8U9SqoRu1Gd32x+LV6W7ZWTInlxor3O6DO/TrzhUGA7Bq6H0pzzOlLRCUImDrrBFnxjIFn91wkcz2SN
      HX1F67GH7l/SbfVytNeiMH4Wjz2Z/IsyMVREridH4femKQRBkfTW/CpKHzABkXNMXYTot8ndOhpPlK2Bv
      Z0bw/5hve8b+Q99B+evnqJt7FxXjr0Y4kS3H8thJru3Hx1ziC9+z3SwU0kL30gtCdfAfHagjuxQ5OLpE3b
      5SWnZFDIWuuSGj98acY3i6DmiaXkDcrqM52GG/UKKlvN0=
      </Modulus>
      <Exponent>AQAB</Exponent>
      <P>6rz3AuWAiePXJWAkGYjnWPpOEVf42hI6C0j+EUN2d9ZieKI/yQZUEnXMAGqIJm/gJJO1xRlz1Fjce3b+u6FC
      AOdBx3ydC0NfjSMAAqfq182SolBrw+rmb/XgKHBiRVsdALhGIkgkpvM5k6VQssg3X8+ZCDT6IABcC8HgJbNaUKK4ygD5I602QL1Ua1ljh
      fnJblcFJFVbatzzIt6AtqzikEqoh73kTfm0mdELDnzkmDOwr3LVAvbt5YQCXSDSH3+eURp+RKuV785c2kYfcPYUhrs3i5mzc8EK0swulyttYbh
      Bh2OM/Uqwl5t/Ad01GBRdP9CrmJth0n/gKYfYMlQoNQ==
      </P>
      <Q>
      2T6WmqCX9C5FyED+iEkqFuB+7fPlfRcj3Qp+vwAnNH4axsQFQHZGmNB2slxhZs+/FoovSo26W9MhWgl2lfxznaG1oqFTmRLhFAj1HqevP4hasCrsiMNJfZKlIny2W/BUc30apuqcuPDTDu6zdSo355mJsuLOwEV/Ztq5MXpC43rwu8UrFvo7JshQyGIuW8fXmYmT5drOcd6+5cbcnxp8QIZk1wVVLxCSVF6SnWFAjqXmcdhHF2vRQC1vdUo6FXekq1V/am3ZscORCh3iJWHwHQDMkTdx/0CGDHZUt54S6gkKSn7QVJKiX63yAIXdugCePHUxBgWJznZeCFKN6ddnCQ==
      </Q>
      <DP>
      r/qyhC1iS/3PkWmeJraIGiCs3jvBiFsZwNQcBP06l2TVtfKNNzvTU3OUWMuE/qvosgM6xmTqfUuRH8558lhWjy7QFanKYmNEAx82JseUO+0V/TGlWN+FmnIOdsKqKazA9YUwrwq+z5qQk6vf7+hB+0Y7R/fPfKZIW1ghnqHzF3imaGqKXMDCZ46I92GwRwSYimwaor6LJnY2oPGGNW0u/VW7OuiVfA+z4YziaR4gkipOT3obT3mnp+VrkD3GyW53Vf4yo3Cvm3RuEAV6FMmnYcqBPdsguasDXj1MwHACNLxaBBIR5OJVuZMNiGw6Ha9GqUzbGDGFCLZtazU4U6Lb8Q==
      </DP>
      <DQ>
      pyF6ld0k6gtLTkOKTmkTQ2RU4lW34OOTiLNRTTod70lw6ifV7oDP0TLXjmJ54LHEzd9jgJTGoWwthWowXDVK8SN+bG52tRYMKPC3O20/6r3JHyz2qkSrXjsaZgzR8qtTHUJK5c0q4zEK/rrvPx1KwxehEwlgjBUrbYKp5QGtQfrMB3kprFS4ex6y32aBScTV/l4UdUo/duUpsfaqtpCWtMFwBOgqX7n9CYF0hDVUiCnjvwPntYISCrCpxe9j/i38dn+hNczrJNJS3BifaakOJBIAT1v7jKckOaQzisvGu1xXGXa0acwhtUBKJNLYAQgGtHZoT7ylBzyTHQ399b/smQ==</DQ><InverseQ>0VYb7ceUzPwRs7j8Yw1ByEMhju5ZRkCn7gQ+MHllXNI7iYt+Ufrfoq3v8Sdr8JO4e7h2O6LlXOQouQxta2hG8zJPf7XuRQ/Q1jN6CdCo1pwg6g3YMs3LkO83MgticdIx+rTbW/rxoMQaYcettQYS4Hx28VyPG3Mqitt2u6UiNyBqc7YhCOD/b2fQPTIKr2BJP5yh+XNfbd/g/zgR0bAgS/r86epLI094DaiRCSteu2mruwWBF47KI793ibXRCNc16GNdAHu3lF9MHstu8uS8VihABTAHprx0gwdS+c4NQGiRB9RNMJjdXVFdj0J1daNZWFnk3kkoy/CKIyd9nbW4yg==</InverseQ><D>jhzw+nYw32JkTmXINY3ZPTyvnCx4vtJ6yT79zZBtQ+CPjandeN9R3CF8yNCGGfW2jBs/NnfHcs488IdyDNxInrWtUs4Qya3OtbGY7giJVtv8mSrKBHaLCc3oVVVwKtItTzc6uICEvz5EH8M8GVBKSkjIlD/Ue1jtZ6yjajQ4celtg42ruW2jExPthm2r+UmCSZoVlrFit0fNCGp3A4+mDAPqgVAmo3yFEqInDeZvt7MR3bj8rOqp/g9HVB2X3O79cb6+9SwdGQQjo/VD5sUlLW9DhqcQtjUYApJBN7a7HtPSPy2IriO4U73yB41m18bsKiGtJw2S21BO6sWp0JGux3lMc/4G1OTigjLd8WepgQFi8NUcZmNJCtyUAC5IEkj0CZTSdi0bRFs6+359ia4PRM0eZRiTOyy+oTAsV/N2OWRqPyOENLFaAG4Sx//hQI7CFBACpiioW2XNCPK+0CzGXaEZoH0Lhl7Lt1bTKzNwTDbJuTDNdd9GNvuAW3abm2qeMq3JogfNkj60tMBC/8CFsDRZtLzIj8wf7W3FS0Igekbfvt6QgWwb+ObQDuxMxYfL8JYOUu1I4IckPy+sCHLuI0oryhssKqN9DDtGHql43E6GMQCB+JjXhesBMw66FUHd0Odf7AR42H1Q1iJ5jVtGG0j1RQKbxhUAa6jNlK9ZzOE=</D></RSAKeyValue>


      What denn nun 8| Braucht man den Exponenten wirklich? Ich werde das Schlüsselpaar also vom VB.Net erstellen lassen da ich dort ja auch den Publickey hinterher einpflanze - lässt sich ja auch sorglos mit einfüttern, wenn der rauskommt gibts ja kein wirkliches Problem^^
      Aber kann ich diesen Schlüssel auch ohne den Exponenten kopieren und in PHP einfügen lassen?

      Würd mich freuen wenn mir jemand da kurz ein bisschen den Schleier von den Kontaktlinsen heben könnte ;)
      OpenSSL stellt sich den KEY irgendwie kürzer vor, während .Net da noch D,Q,DP und bliblablub mit reinzaubert :D

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