1 | #include "mbedtls/aes.h"
|
2 |
|
3 | void encrypt(char * input, char * key, unsigned char * outputBuffer, int block)
|
4 | {
|
5 | mbedtls_aes_context aes;
|
6 |
|
7 | unsigned char iv[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} ;
|
8 | mbedtls_aes_init( &aes );
|
9 | mbedtls_aes_setkey_enc( &aes, (const unsigned char*) key, strlen(key) * 8 );
|
10 | mbedtls_aes_crypt_cbc( &aes, MBEDTLS_AES_ENCRYPT, block, iv, (const unsigned char*)input, outputBuffer );
|
11 | mbedtls_aes_free( &aes );
|
12 |
|
13 | }
|
14 |
|
15 | void decrypt(unsigned char * cipherText, char * key, unsigned char * outputBuffer, int block)
|
16 | {
|
17 | mbedtls_aes_context aes;
|
18 |
|
19 | unsigned char iv[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} ;
|
20 | mbedtls_aes_init( &aes );
|
21 | mbedtls_aes_setkey_dec( &aes, (const unsigned char*) key, strlen(key) * 8 );
|
22 | mbedtls_aes_crypt_cbc( &aes, MBEDTLS_AES_DECRYPT, block, iv, (const unsigned char*)cipherText, outputBuffer );
|
23 | mbedtls_aes_free( &aes );
|
24 |
|
25 | }
|
26 |
|
27 | void setup() {
|
28 | Serial.begin(115200);
|
29 |
|
30 | char *key = "abcdefghijklmnopABCDEFGHIJKLMNOP" ;
|
31 |
|
32 | char *input = "1231234TuuRiii x";
|
33 |
|
34 | unsigned char output[128];
|
35 | unsigned char output2[128];
|
36 |
|
37 | int input_len = strlen(input);
|
38 | int output_len = input_len;
|
39 |
|
40 | int teiler, rest, blocklaenge;
|
41 |
|
42 | teiler = input_len / 16;
|
43 | rest = input_len % 16;
|
44 |
|
45 | if (rest != 0)
|
46 | {
|
47 | blocklaenge = (teiler+1)*16;
|
48 | }
|
49 |
|
50 | if (rest == 0)
|
51 | {
|
52 | blocklaenge = (teiler)*16;
|
53 | }
|
54 |
|
55 | Serial.print("input: ");
|
56 | Serial.println(input);
|
57 | Serial.print("Länge des Inputs: ");
|
58 | Serial.println(input_len);
|
59 | Serial.print("gesamte blocklänge: ");
|
60 | Serial.println(blocklaenge);
|
61 |
|
62 | encrypt( input, key, output, blocklaenge);
|
63 |
|
64 | Serial.println("\n Ciphered text:");
|
65 | for (int i = 0; i < blocklaenge; i++)
|
66 | {
|
67 | char str[3];
|
68 |
|
69 | sprintf(str, "%02x", (int)output[i]);
|
70 | Serial.print(str);
|
71 | }
|
72 |
|
73 | decrypt( output, key, output2, blocklaenge);
|
74 |
|
75 | Serial.println("\n Deciphered text: ");
|
76 |
|
77 | for (int k = 0; k < output_len; k++)
|
78 | {
|
79 | Serial.print((char)output2[k]);
|
80 | }
|
81 |
|
82 | Serial.println("END");
|
83 | }
|
84 |
|
85 | void loop() {
|
86 | // put your main code here, to run repeatedly:
|
87 |
|
88 | }
|