Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Verschleierung pro Abteilung
#1
Hallo,

vor einigen Tagen kam wieder einmal eine Frage:

"Es soll ein Report mit vielen Seiten an mehrere Abteilungen verschickt werden, aber jede Abteilung soll nur einen Teil sehen können"

Der üblich Weg, Sheets mit "xlVeryHidden" zu verstecken und je nach Environ("Username") freizuschalten, klappt schlecht:

- Implementierungsprobleme beim Anwender
- sofortiges Überwinden durch Forums-Antworter

Eine Verbesserung wäre durch eine unterschiedliche Verschleierung pro Emplänger möglich. Anbei ist ein KlassenModul für eine Base64-Kodierung mit einem beliebig sortierten String [0-9A-z+/]

Jeder Empfänger müsste den DeKodierungs-String lokal speichern (VBA.SaveSetting). Der Report-Ersteller hätte alle Strings zum Kodieren.

Fragen:

- besteht ein Bedarf
- wie sicher ist ein Verschlüsselung mit manipuliertem Base64

Bei einem ersten, kleinen Versuch habe ich mich "verheddert", also etwas Lernaufwand besteht schon.

mfg


Angehängte Dateien
.txt   clsBase64.cls.txt (Größe: 2,09 KB / Downloads: 7)
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • Der Steuerfuzzi
Antworten Top
#2
Frage:

Wenn schon unterschiedlich teil-sichtbare Exemplare, warum dann nicht einfach unterschiedliche Ausgabedateien jeweils ohne Verschlüsselung? Das ließe sich a) automatisieren und b) entsprechend automatisiert auch mailen.

Wenn eine Abteilung der anderen ihr eigenes Exemplar unter die Nase hält (was sie nicht darf), kann man da natürlich auch nichts machen.
Antworten Top
#3
Hallo Fennek,

das ist ein ganz interessanter Ansatz. Selbst für einen fortgeschritteneren Nutzer sollte diese Codierung ein nicht allzu leicht zu umgehendes Hindernis sein.

Ich kann mir vorstellen, dass die Laufzeit für die Codierung relativ lang sein wird, da Du ja die Zellen einzeln auslesen, codieren und wieder schreiben müsstest.

Beim umwandlungsvorgang selbst könnte man noch ein paar Millisekunden rausholen, wenn man statt der Stringoperationen Basisfunktionen (Multiplikation, Division -> Bitshift) verwendet. Wahrscheinlich sind das aber eher geringere Zeiten im Vergleich zu den Zellzugriffen.

Hast Du es schon mal an einer Beispieldatei ausprobiert?
Gruß
Michael
Antworten Top
#4
Hallo,

ja, es gibt einfache Wege (pro Abteilung eine Datei), aber warum nicht mit etwas mehr Aufwand.

Die Tests waren eher kleine Beispiele (20 Zeilen, 5 Spalten) und gingen sehr schnell. In einem Modul mit

Vorbereitung:
Code:
Sub T_1()
VBA.SaveSetting "xl", "b64", "no1", "gsfpSa/AQXwJ8yYPn0lF1i3m9ZzN5Kq2ItGkuTe4ExbLvRD+MVocd7CjUBWHhO6r"
VBA.SaveSetting "xl", "b64", "no2", "hactMdjowWNFv2H6RCiUAE3qrymBL9T5g74P1XDIuVYJfn0b+klOx/sGQKSpZ8ez"
VBA.SaveSetting "xl", "b64", "no3", "oct1gs9rI0lHPpmQ+dnJkTu2xiYvMEG6DaKNSe5F4b/qALXhZO7WURz8Vw3BjCfy"
VBA.SaveSetting "xl", "b64", "no4", "YSgdW87xhr2XFVCT/qmfNkb9vH3Eu5LeZOBR4yGKQjAiPp1oIzctn0DlM + wsa6JU"

End Sub

Die Varianten müssen im Klassenmodul eingefügt werden, entweder als String oder mit VBA.GetSettings.

EnCrypt:
Code:
Sub enCode()
Dim B64 As New clsBase64
Dim c As Range

For Each c In ActiveSheet.UsedRange
    'Debug.Print c, B64.Enc(c.Value)
    c.Value = B64.Enc(c.Value)
Next c
End Sub

und wieder DeCrypt
Code:
Sub deCode()
Dim B64 As New clsBase64
Dim c As Range

For Each c In ActiveSheet.UsedRange
    'Debug.Print c, B64.Enc(c.Value)
    c.Value = B64.Dec(c.Value)
Next c
End Sub

geht, von Hand gestartet, recht gut.

Der "normale" Weg mit Ado-Stream erschien mir recht unständlich.

mfg
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste