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.
Ein Beispiel Aufruf wäre:
Ich hoffe ihr könnt etwas damit anfangen.
Grüße Jakob
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
- Option Strict On
- Imports System.Security.Cryptography
- Imports System.Text
- Module Crypt
- Structure RSA_key_Struct
- Dim open_key As String 'Bestehend aus einem öffentlichem
- Dim privat_key As String 'und einem privatem Schlüssel, die beide als string im XML-Format ges
- End Structure
- 'Zufälligen RSA Schlüssel erstellen. Mit einer Schlüssellänge von 2048 als Standartwert
- Function Create_RSA_Key(Optional ByVal keysize As Integer = 2048) As RSA_key_Struct
- Dim RSA_key As RSA_key_Struct 'RSA_key als RSA_key_Struct Struktur definieren
- Dim RSA_Crypto As New RSACryptoServiceProvider(keysize) 'Zufällige Schlüssel generieren
- RSA_key.open_key = RSA_Crypto.ToXmlString(False) 'Öffentlichen Schlüssel schreiben
- RSA_key.privat_key = RSA_Crypto.ToXmlString(True) 'Privaten Schlüssel schreiben
- RSA_Crypto.Dispose() 'Ressourcen freigeben
- Return RSA_key 'Schlüssel übergeben
- End Function
- 'String mit RSA verschlüsseln. Mit einer Schlüssellänge von 2048 als Standartwert. Zum Verschlüsseln wird der öffentliche Schlüssel verwendet
- Function RSA_ver(ByVal DATA As String, ByVal Openkey_Xml As String, Optional ByVal keysize As Integer = 2048) As String
- Dim RSA_Crypto_ver As New RSACryptoServiceProvider(keysize) 'RSA-service wird deklariert
- Dim byte_data As Byte() = UTF8Encoding.UTF8.GetBytes(DATA) 'Daten-String wird in ein byte array geschrieben
- Dim Out_String As String = String.Empty 'Ausgangswert wird deklariert
- RSA_Crypto_ver.FromXmlString(Openkey_Xml) 'RSA-service erhält den öffentlichen Schlüssel
- Out_String = Convert.ToBase64String(RSA_Crypto_ver.Encrypt(byte_data, True)) 'Daten werd verschlüsselt und in einen Base64-String geschrieben
- RSA_Crypto_ver.Dispose() 'Ressourcen werden freigeben
- Return Out_String 'Verschlüsselte Daten werden übergeben
- End Function
- 'String mit RSA entschlüsseln. Mit einer Schlüssellänge von 2048 als Standartwert. Zum Entschlüsseln wird der private Schlüssel verwendet
- Function RSA_ent(ByVal DATA As String, ByVal Privatekey_Xml As String, Optional ByVal keysize As Integer = 2048) As String
- Dim RSA_Crypto_ent As New RSACryptoServiceProvider(keysize) 'RSA-service wird deklariert
- Dim byte_data As Byte() = Convert.FromBase64String(DATA) 'Daten-String aus dem Base64-String(!) in ein byte array geschrieben
- Dim Out_String As String = String.Empty 'Ausgangswert wird deklariert
- RSA_Crypto_ent.FromXmlString(Privatekey_Xml) 'RSA-service erhält den privaten Schlüssel
- Out_String = Encoding.Default.GetString(RSA_Crypto_ent.Decrypt(byte_data, True)) 'Daten werden entschlüsselt,in einen und zu einem normalem String geschrieben
- RSA_Crypto_ent.Dispose() 'Ressourcen werden freigeben
- Return Out_String 'Entschlüsselte Daten werden übergeben
- End Function
- End Module
Ein Beispiel Aufruf wäre:
VB.NET-Quellcode
- Sub Schlüssel_erstellen_und_funktion_prüfen()
- Dim RSA_key As Crypt.RSA_key_Struct = Crypt.Create_RSA_Key
- IO.File.WriteAllText("Öffentlicher_Schlüssel.xml", RSA_key.open_key)
- IO.File.WriteAllText("Privater_Schlüssel.xml", RSA_key.privat_key)
- Dim plain As String = "Hello World"
- Dim crypted As String = Crypt.RSA_ver(plain, RSA_key.open_key)
- Dim encrypted As String = Crypt.RSA_ent(crypted, RSA_key.privat_key)
- MsgBox("Plain: " & plain)
- MsgBox("Crypted: " & crypted)
- MsgBox("Encrypted: " & encrypted)
- End Sub
Ich hoffe ihr könnt etwas damit anfangen.
Grüße Jakob