Direkt zum Hauptinhalt

Felder für CRYPTO+PLUS verschlüsseln

Dieses Skript zeigt, wie bestehende Feldwerte in cobra über die CRYPTO+PLUS-API verschlüsselt und in einem Zielfeld abgelegt werden können.

 



Anwendungsfall

Sensible Daten (z.B. Passwörter, Zugangsdaten, personenbezogene Informationen) sollen per Massenverarbeitung verschlüsselt werden. Das Skript liest den Klartext aus einem Quellfeld, verschlüsselt ihn mit dem CRYPTO+PLUS Public-Key und speichert das Ergebnis in einem Memo-Feld.

 



Voraussetzungen

  • CRYPTO+PLUS muss installiert und eingerichtet sein
  • Ein Schlüsselpaar muss bereitstehen (Public-Key im cobra-Systempfad)
  • Das Zielfeld muss ein Bemerkung-Feld sein (verschlüsselter Text ist länger als der Klartext)
  • Zusätzliche Referenz im Skript-Editor:
    C:\Program Files\cobra\CRMPRO\Programm\Module\Extension\Addins\CryptoPlus\Ruthardt.CryptoPlus.BusinessLogic.dll



Konfiguration in PRINT+PLUS

  • Exporter-Typ: Skript (es wird kein Dokument erzeugt, nur Daten verarbeitet)
  • Event: AfterLoadData
  • Filtertyp: Empfohlen: "Komplette Liste": Damit können mehrere Datensätze in einem Durchlauf verschlüsselt werden.

 



Vollständiges Skript

// Version 6
namespace Ruthardt.PrintPlus.Skripting
{
	using System.Collections.Generic;
	using Ruthardt.CobraBase.Functions.Access.Ado;
	using Ruthardt.Common.Util;
	using Ruthardt.CryptoPlus.BusinessLogic;
	using Ruthardt.PrintPlus.Model.Interfaces;
	
	public class FelderVerschluesseln : IScriptAction
	{
	    // Pfad zum Public-Key des Benutzers, der später lesenden Zugriff haben soll
	    private const string PUBLIC_KEY_PFAD = @"\\server\cobra\CRMPRO\System\Ruthardt\Crypto\BENUTZERNAME.public";
	
	    // Quell- und Zielfeld
	    private const string QUELLFELD = "Passwort_unverschluesselt";
	    private const string ZIELFELD = "Passwort_verschluesselt";
	
	    public void Execute(IPrintContext printContext, ICurrentContext currentContext, IChildContext childContext)
	    {
	        var datensatz = currentContext.Data;
	
	        // Klartext-Wert auslesen
	        var klartext = datensatz.GetStringValue(QUELLFELD);
	
	        if (string.IsNullOrWhiteSpace(klartext))
	        {
	            // Nichts zu verschlüsseln
	            return;
	        }
	
	        // Bereits verschlüsselt? Dann überspringen
	        var bestehendeVerschluesselung = datensatz.GetStringValue(ZIELFELD);
	        if (!string.IsNullOrWhiteSpace(bestehendeVerschluesselung))
	        {
	            printContext.Logger.Debug($"Datensatz {datensatz.CurrentKey}: Bereits verschlüsselt – übersprungen.");
	            return;
	        }
	
	        // CRYPTO+PLUS API initialisieren
	        var cryptoService = new CryptoPlusService(printContext.Logger);
	
	        // Public-Keys definieren (ein oder mehrere Empfänger)
	        var berechtigteBenutzer = new List<CheckUser>
	        {
	            new CheckUser(PUBLIC_KEY_PFAD)
	        };
	
	        // Verschlüsseln und im Zielfeld speichern
	        var verschluesselt = cryptoService.EncryptDataText(klartext, berechtigteBenutzer);
	        datensatz.SetValue(ZIELFELD, verschluesselt);
	
	        // Änderung in die Datenbank schreiben
	        currentContext.SaveChanges = true;
	
	        printContext.Logger.Info($"Datensatz {datensatz.CurrentKey}: Feld '{QUELLFELD}' erfolgreich verschlüsselt.");
	    }
	}
}

 



Erklärung

  1. Klartext lesen: Der unverschlüsselte Wert wird aus dem Quellfeld ausgelesen.
  2. Prüfung: Wenn das Feld leer ist oder bereits verschlüsselt wurde, wird übersprungen.
  3. Verschlüsselung: Die CRYPTO+PLUS API verschlüsselt den Text mit dem angegebenen Public-Key. Nur Besitzer des zugehörigen Private-Keys können den Wert später entschlüsseln.
  4. Speichern: Der verschlüsselte Wert wird ins Zielfeld geschrieben und per SaveChanges in die DB gespeichert.

 



Mehrere Berechtigte (Public-Keys)

Sie können mehrere Benutzer angeben, die den verschlüsselten Wert lesen dürfen:

var berechtigteBenutzer = new List<CheckUser>
{
    new CheckUser(@"\\server\cobra\System\Ruthardt\Crypto\Mueller.public"),
    new CheckUser(@"\\server\cobra\System\Ruthardt\Crypto\Schmidt.public"),
    new CheckUser(@"\\server\cobra\System\Ruthardt\Crypto\Admin.public")
};

 



Hinweise

  • Massenverarbeitung: Verwenden Sie im Filterdialog „Komplette Liste" mit einem passenden Filter (z. B. Passwort_verschluesselt IS NULL), um nur noch nicht verschlüsselte Datensätze zu verarbeiten.
  • Quellfeld löschen: Nach erfolgreicher Verschlüsselung sollten Sie das Quellfeld leeren, damit der Klartext nicht mehr in der Datenbank steht: datensatz.SetValue(QUELLFELD, "");
  • Entschlüsselung: Die Entschlüsselung erfolgt über CRYPTO+PLUS selbst (in cobra oder per API mit dem Private-Key). PRINT+PLUS ist nur für das initiale Verschlüsseln zuständig.