Skip to content
Snippets Groups Projects
Anian Bühler's avatar
Anian Bühler authored
3ddc8737
History

DidacticEncryption

Bibliothek zur Implementierung von vereinfachten Verschlüsselungen auf Arduino-Boards. 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)

Beispiele

  • symetricExample.ino -> TODO

Funktionen und Parameter

#Anlegen der Instanz
// Anlegen des DidacticEncSymetric-Objekts
// 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, 
//                     DE_ERROR_KEYLENGHT_LONG  -> Key zu lang
//                     DE_ERROR_KEYLENGHT_SHORT -> Key zu kurz

#Symetrisch ver- und entschluesseln
void symEncrypt.crypt(char* messageIn, char* messageOut);
// 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 Key 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

Konstanten

Konstanten aus der Library die fuer die Programmierung genutzt werden und angepasst werden koennen.

#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

#Errors (nicht veraendern!)
DE_ERROR_NOERROR          1
DE_ERROR_KEYLENGHT_LONG  -1
DE_ERROR_KEYLENGHT_SHORT -2

Asymetrische Verschluesselung (angelehnt an RSA)

Beispiele

  • asymetricExample.ino -> TODO

Funktionen und Parameter

#Anlegen der Instanz
// Anlegen des DidacticEncAsymetric-Objekts
// asymEncrypt -> moeglicher Name für Objekt
DidacticEncAsymetric asymEncrypt;

#Schlüssel erzeugen und verwenden
void generateKeys();
//erzeugt Private-Key, Public-Key und RSA-Modul

long getPrivateKey();
// return: Private-Key

long getPublicKey();
// return: Private-Key

long getRsaModule();
// return: RSA-Modul (zur Verschluesselung in Kombination entweder mit Public- oder Private-Key)


#Asymetrisch verschluesseln
int asymEncrypt.encrypt(char* plainText, char* cypherText, long key, long rsaModule);
// param1: Eingehende Nachricht (Lesbarer Text)
// param2: Ausgehende Nachricht (Verschluesselter Text)
// param3: Key zum Verschluesseln der Nachricht
// param4: RSA-Modul zum Verschluesseln der Nachricht
// return: Lange der verschluesselten Nachricht (Anzahl Zeichen -> in ASCII-Zeichen gewandelte long-Werte )

int asymEncrypt.encrypt(char* plainText, int lengthOfPlainText, char* cypherText, long key, long rsaModule);
// param2: Laenge der eingehenden Nachricht -> verwenden wenn kein '\0' am Ende steht

#Asymetrisch entschluesseln
int asymEncrypt.decrypt(char* cypherText, char* plainText, long key, long rsaModule);
// param1: Eingehende Nachricht (verschluesselter Text)
// param2: Ausgehende Nachricht (lesbarer Text)
// param3: Key zum entschluesseln der Nachricht
// param4: RSA-Modul zum entschluesseln der Nachricht
// return: Laenge der entschluesselten Nachricht (Anzahl Zeichen)

void setRandomSeedPin(int);
// param1: unbenutzter Analog-Pin A0 bis A5 zur Erzeugung von (quasi-) zufaelligen Zahlen

Konstanten

Konstanten aus der Library die fuer die Programmierung genutzt werden und angepasst werden koennen.

#ASCII Trennzeichen zwischen Cypher-Werten
CYPHER_SEPARATOR   default:";"

#Maximale Laenge der verschluesselten Nachricht
MAX_LEN_CYPHERTEXT default: 250

#Primes 
MAX_NR_OF_PRIMES    48  (nicht veraendern)
MAX_PRIME_OFFSET    3