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
- Klartext lesen: Der unverschlüsselte Wert wird aus dem Quellfeld ausgelesen.
- Prüfung: Wenn das Feld leer ist oder bereits verschlüsselt wurde, wird übersprungen.
- 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.
- Speichern: Der verschlüsselte Wert wird ins Zielfeld geschrieben und per
SaveChangesin 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.