diff --git a/README.md b/README.md index 598dad23262422ede79c41adc870c9c1dfd526f7..56995add3dc0b1628efdcfbcb11171c007de995a 100644 --- a/README.md +++ b/README.md @@ -4,14 +4,16 @@ Bibliothek zur Implementierung von vereinfachten Verschlüsselungen auf Arduino- Die Funktionalitaeten entsprechen dem Stand der Technik, die Umsetzung ist didaktisch reduziert. ## Download + Start download with the button on the right side. Choose the right format and start the download. - + After download install library: https://www.arduino.cc/en/guide/libraries section "Importing a .zip Library" # Symetrische Verschluesselung (XOR) + Diese KLasse ermöglicht eine einfache symmetrische Verschlüsselung auf einem Arduino-Board mit 8-Bit-µController, wie z.B. dem Arduino Uno. Der Algorithmus nutzt eine Exklusiv-Oder-Verknüpfung als Verschlüsselung. @@ -23,9 +25,10 @@ Der Algortihmus ist für den ASCII-Zeichensatz geeignet. - Für 7-Bit ASCII-Code geeignet ## Beispiele -- symetric_minimal_.ino -## Funktionen und Parameter +- symetric*minimal*.ino + +## Funktionen und Parameter ```cpp #Anlegen der Instanz @@ -33,39 +36,76 @@ Der Algortihmus ist für den ASCII-Zeichensatz geeignet. // symEncrypt -> moeglicher Name für Objekt DidacticEncSymetric symEncrypt; + #Setzen des Schluessels für die symetrische Verschluesselung int symEncrypt.setKey(char*); // param1: Schluessel-string (char-Array mit '\0' am Ende) mit der Laenge LENGHT_KEY (default 8) + 1 -// return: ERROR-Wert: DE_ERROR_NO_ERROR, +// return: ERROR-Wert: DE_ERROR_NO_ERROR, // DE_ERROR_KEYLENGHT_LONG -> Key zu lang // DE_ERROR_KEYLENGHT_SHORT -> Key zu kurz -#Symetrisch ver- und entschluesseln + + +#Symetrisch ver- und entschluesseln (BASIC -> nur XOR) void symEncrypt.crypt(char* messageIn, char* messageOut); -// param1: Eingehende Nachricht (Lesbarer Text oder verschluesselter Text) -// param2: Ausgehende Nachricht (Verschluesselter Text oder lesbarer Text) +// param1: Eingehende Nachricht (lesbarer Text oder verschluesselter Text) +// param2: Ausgehende Nachricht (verschluesselter Text oder lesbarer Text) //-> verwendet internen Key, welcher über setKey(char*) gesetzt wurde void symEncrypt.crypt(char* messageIn, char* messageOut, char* key); // param3: Key-string (char-Array mit '\0' am Ende) // -> ignoriert internen Key - sinvoll wenn verschiedene Keys in einem Programm verwendet werden sollen. -void symEncrypt.crypt(char* messageIn, int lenghtMessageIn, char* messageOut, int lenghtMessageOur, char* key); -// param2 + param 4: Laenge der uebergebenen Nachrichten -> verwenden wenn kein ’\0' am Ende steht +void symEncrypt.crypt(char* messageIn, int lenghtMessageIn, char* messageOut, char* key, int lengthKey); +// param2 + param 4: Laenge der uebergebenen Nachrichte und des Keys -> verwenden wenn kein ’\0' am Ende steht + + + +#Symmetrisch ver- und entschluesseln (ADVANCED -> XOR + zweite Runde XOR mit Prüfsumme) +void encrypt(char *messageIn, char *cypherOut); +// param1: Eingehende Nachricht (lesbarer Text) +// param2: Ausgehende Nachricht (verschluesselter Text) +//-> verwendet internen Key, welcher über setKey(char*) gesetzt wurde + +void encrypt(char* messageIn, char* cypherOut, char* key); +// param3: Key-string (char-Array mit '\0' am Ende) +// -> ignoriert internen Key - sinvoll wenn verschiedene Keys in einem Programm verwendet werden sollen. + +void encrypt(char* messageIn, int lengthMessageIn, char* cypherOut, char* key, int lengthKey); +// param2 + param 4: Laenge der uebergebenen Nachrichte und des Keys -> verwenden wenn kein ’\0' am Ende steht + + +bool decrypt(char *, char *); +// param1: Eingehende Nachricht (verschluesselter Text) +// param2: Ausgehende Nachricht (lesbarer Text) +//-> verwendet internen Key, welcher über setKey(char*) gesetzt wurde + +bool decrypt(char *, char *, char *); +// param3: Key-string (char-Array mit '\0' am Ende) +// -> ignoriert internen Key - sinvoll wenn verschiedene Keys in einem Programm verwendet werden sollen. + +bool decrypt(char *, int, char *, char *, int); +// param2 + param 4: Laenge der uebergebenen Nachrichte und des Keys -> verwenden wenn kein ’\0' am Ende steht + ``` + ### Konstanten + Konstanten aus der Library die fuer die Programmierung genutzt werden und angepasst werden koennen. ```cpp #Laenge Key und Daten -DE_LENGHT_KEY default: 8 -MAX_LEN_CYPHERTEXT default: DE_LENGHT_KEY*4 -MAX_LEN_PLAINTEXT default: DE_LENGHT_KEY*4 +MIN_LEN_KEY default: 5 +MAX_LEN_KEY default: 20 +MAX_LEN_PLAINTEXT default: 19 +MAX_LEN_CYPHERTEXT default: 20 #Errors (nicht veraendern!) DE_ERROR_NOERROR 1 DE_ERROR_KEYLENGHT_LONG -1 DE_ERROR_KEYLENGHT_SHORT -2 +DE_CS_CORRECT true +DE_CS_INCORRECT false ``` # Asymetrische Verschluesselung (angelehnt an RSA) @@ -82,12 +122,13 @@ Der Algortihmus ist (nur) für den ASCII-Zeichensatz geeignet. - RSA ohne gängige zusätzliche Sicherheitsfeatures - Keine Primzahlgenerierung - Nur für Werte bis 127 geeignet -> 7-Bit ASCII-Code -- Verschlüsselte Daten werden als long-Zahlen in ASCII-Darstellung ausgegeben bzw. eingelesen +- Verschlüsselte Daten werden als long-Zahlen in ASCII-Darstellung ausgegeben bzw. eingelesen ## Beispiele -- asymetric_minimal_.ino -## Funktionen und Parameter +- asymetric*minimal*.ino + +## Funktionen und Parameter ```cpp #Anlegen der Instanz @@ -135,6 +176,7 @@ void asymEncrypt.setRandomSeedPin(int); ### Konstanten Konstanten aus der Library die fuer die Programmierung genutzt werden und angepasst werden koennen. + ```cpp #ASCII Trennzeichen zwischen Cypher-Werten CYPHER_SEPARATOR default:";" @@ -142,7 +184,7 @@ CYPHER_SEPARATOR default:";" #Maximale Laenge der verschluesselten Nachricht MAX_LEN_CYPHERTEXT default: 250 -#Primes +#Primes MAX_NR_OF_PRIMES 48 (nicht veraendern) MAX_PRIME_OFFSET 3 ```