Hallo Community
Habe mein erstes kleines Projekt in C# gemacht.
Ich wusste zuerst nicht wirklich was ich genau machen werde. Hab mich dann für ein einfacheres entschieden.
Und zwar für eine dynamische Array und eine dafür passende Liste, basierend auf den primitiven Datentypen. Beide sind generisch aufgebaut, und waren daher auch eine kleine Herausforderung.
Die Umstellung auf C# empfand ich erstaunlicherweise nicht so belastend. Schon nach wenigen Stunden hab ich nur noch in C# gedacht, und der Lernerfolg war sehr gross.
Das Projekt SecureListOfT
SecureArray<T>
SecureArrayOfT ist wie eine Liste, mit einer internen Array. Es verwaltet den benötigten Speicher (Allokation) komplett selber. Anderseits können Einstellungen (gilt auch für SecureListOfT) über zwei entscheidende Properties gemacht werden.
Capacity
Gibt die reale Länge der internen Array aus. Es kann auf Wunsch höher oder tiefer gesetzt werden. Die Kapazität kann aber nicht unter die Arbeitslänge (Bereich, mit der gearbeitet wird) gewählt werden. Der Arbeitsbereich ist quasi geschützt und SecureArrayOfT übernimmt bei unterschreiten der Kapazität eine eigene Wahl für die optimale Kapazität.
Möchte man die Kapazität exakt der Arbeitslänge anpassen, kann das mit der Methode TrimExcess() bewerkstelligt werden.
CapacityStep (Default = 10)
Ist ein Wert der bei jeder "Relocation" auf die Arbeitslänge hinzugerechnet wird. Wenn also die Kapazität z.B. 20 ist, und es werden weitere 30 Werte der internen Array hinzugefügt, rechnet SecureArrayOfT zuerst die benötigte Arbeitslänge aus, und zählt am Schluss noch den CapacityStep dazu, damit beim Hinzufügen von einzelnen Zahlen nicht immer gleich eine Relocation eingeleitet werden muss.
Auch der CapacityStep kann verändert werden. Der minimale CapacityStep bleibt jedoch 10.
Jedes SecureArrayOfT hat seinen eigenen Schlüsselsatz. Werden also zwei SecureArrayOfT instanziert, besitzt die interne Array auch wenn beide SecureArrayOft die gleichen Zahlen verwalten komplett andere Werte. Die Verschlüsselung ist sehr stark und man kann sich aus den Zahlen der internen Array keinen Reim machen wie die RealZahlen nun wirklich sind.
Da die Vercryptung seine Zeit benötigt, habe ich für SecureArrayOfT viele kleine Methoden hinzugefügt, die das Hinzufügen und Entfernen beschleunigen. Also statt das vielen einzelnen Werte hinzugefügt werden, können auch Arrays hinzugefügt werden. Das bietet die Möglichkeit, dass nur einmal Ent- bzw. Vercryptet werden muss.
Die Daten einer SecureArrayOfT können passwortgeschützt abgespeichert werden.
SecureList<T>
SecureListOfT ist eine Powerliste nur für SecureArrayOfT. Es arbeitet komplett referenziert, besitz aber wenige Methoden die trotzdem die SecureArrayOfT neu instanzieren (mit Allokation), wie z.B. der Contructor, InitNew, Copy... etc.
SecureListOfT besitzt eine eigene RandomShuffel sowie eigene SortierungsMethoden die sehr schnell sind. Auch SecureListOfT besitzt die Möglichkeit die komplette Liste passwortgeschützt abzuspeichern.
Es liegen ausführliche und zum Teil kommentierte UnitTests (in Vb.Net) für beide Werkzeuge dabei. Sie zeigen auch die richtige Anwendung und auf was geachtet werden muss, wenn man mit diesen Werkzeugen arbeitet.
Kommentare, Fragen und Verbesserungshinweise immer gerne willkommen.
Viel Spass beim Testen.
Freundliche Grüsse
exc-jdbi
Hier noch die wichtigsten Eckdaten:
Habe mein erstes kleines Projekt in C# gemacht.
Ich wusste zuerst nicht wirklich was ich genau machen werde. Hab mich dann für ein einfacheres entschieden.
Und zwar für eine dynamische Array und eine dafür passende Liste, basierend auf den primitiven Datentypen. Beide sind generisch aufgebaut, und waren daher auch eine kleine Herausforderung.
Die Umstellung auf C# empfand ich erstaunlicherweise nicht so belastend. Schon nach wenigen Stunden hab ich nur noch in C# gedacht, und der Lernerfolg war sehr gross.
Das Projekt SecureListOfT
SecureArray<T>
SecureArrayOfT ist wie eine Liste, mit einer internen Array. Es verwaltet den benötigten Speicher (Allokation) komplett selber. Anderseits können Einstellungen (gilt auch für SecureListOfT) über zwei entscheidende Properties gemacht werden.
Capacity
Gibt die reale Länge der internen Array aus. Es kann auf Wunsch höher oder tiefer gesetzt werden. Die Kapazität kann aber nicht unter die Arbeitslänge (Bereich, mit der gearbeitet wird) gewählt werden. Der Arbeitsbereich ist quasi geschützt und SecureArrayOfT übernimmt bei unterschreiten der Kapazität eine eigene Wahl für die optimale Kapazität.
Möchte man die Kapazität exakt der Arbeitslänge anpassen, kann das mit der Methode TrimExcess() bewerkstelligt werden.
CapacityStep (Default = 10)
Ist ein Wert der bei jeder "Relocation" auf die Arbeitslänge hinzugerechnet wird. Wenn also die Kapazität z.B. 20 ist, und es werden weitere 30 Werte der internen Array hinzugefügt, rechnet SecureArrayOfT zuerst die benötigte Arbeitslänge aus, und zählt am Schluss noch den CapacityStep dazu, damit beim Hinzufügen von einzelnen Zahlen nicht immer gleich eine Relocation eingeleitet werden muss.
Auch der CapacityStep kann verändert werden. Der minimale CapacityStep bleibt jedoch 10.
Jedes SecureArrayOfT hat seinen eigenen Schlüsselsatz. Werden also zwei SecureArrayOfT instanziert, besitzt die interne Array auch wenn beide SecureArrayOft die gleichen Zahlen verwalten komplett andere Werte. Die Verschlüsselung ist sehr stark und man kann sich aus den Zahlen der internen Array keinen Reim machen wie die RealZahlen nun wirklich sind.
Da die Vercryptung seine Zeit benötigt, habe ich für SecureArrayOfT viele kleine Methoden hinzugefügt, die das Hinzufügen und Entfernen beschleunigen. Also statt das vielen einzelnen Werte hinzugefügt werden, können auch Arrays hinzugefügt werden. Das bietet die Möglichkeit, dass nur einmal Ent- bzw. Vercryptet werden muss.
Die Daten einer SecureArrayOfT können passwortgeschützt abgespeichert werden.
SecureList<T>
SecureListOfT ist eine Powerliste nur für SecureArrayOfT. Es arbeitet komplett referenziert, besitz aber wenige Methoden die trotzdem die SecureArrayOfT neu instanzieren (mit Allokation), wie z.B. der Contructor, InitNew, Copy... etc.
SecureListOfT besitzt eine eigene RandomShuffel sowie eigene SortierungsMethoden die sehr schnell sind. Auch SecureListOfT besitzt die Möglichkeit die komplette Liste passwortgeschützt abzuspeichern.
Es liegen ausführliche und zum Teil kommentierte UnitTests (in Vb.Net) für beide Werkzeuge dabei. Sie zeigen auch die richtige Anwendung und auf was geachtet werden muss, wenn man mit diesen Werkzeugen arbeitet.
Kommentare, Fragen und Verbesserungshinweise immer gerne willkommen.
Viel Spass beim Testen.
Freundliche Grüsse
exc-jdbi
Hier noch die wichtigsten Eckdaten:
Name:
SecureListOfT
Bestehend aus:
- SecureArrayOfT
- SecureListOfT
Beschreibung:
Generische dynamische Array mit intern vercrypteter Array und dazu passend eine generische Liste
Screenshot(s):
Klassendiagramm siehe oben.
Verwendete Programmiersprache(n) und IDE(s):
Projekt: VS 2017 - FW 4.7.1 - C# 7.3
UnitTest: VS 2017 - FW 4.7.1 - VB.NET
Systemanforderungen - Binary:
VS 2017 - FW 4.7.1 - Release 32
Downloads:
Das Projekt gibt es nur als Binary.
- Release 32 - VS 2017 - FW 4.7.1 - C# 7.3
- Die UnitTests als Source beiliegend.
>> Projekt ist beiliegend als Zip downloadbar.
Lizenz/Weitergabe:
Freeware; Closed und OpenSource
Anmerkung:
Obwohl Closed, darf bezugnehmend auf den Code der mit einem IL-Converter jederzeit angeschaut werden
kann, für weitere Dialoge im Forum wie Anmerkungen, Vorschläge etc. verwendet werden.
Infos für die Umsetzung:
vb-paradise.de
stackoverflow.com
docs.microsoft.com
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „exc-jdbi“ ()