Pobierz - Politechnika Poznańska, Wydział Informatyki

Transkrypt

Pobierz - Politechnika Poznańska, Wydział Informatyki
Zygmunt Kubiak
Instytut Informatyki
Politechnika Poznańska
CRC16
05-2016
Zygmunt Kubiak
2
Jeden z przykładów: https://github.com/vinmenn/Crc16
Przykład zawiera bibliotekę metod dla Arduino, do wyznaczania CRC
Przykład programu do bezpośredniego wyznaczania CRC16
Program CRC16
// Wielomian generujący (CCITT-16): x^16 + x^12 + x^5 + 1
// w zapisie HEX: 0x11021,
// w wersji uproszczonej, wykorzystywanej w programie: 0x1021
word temp;
void setup()
{
Serial.begin(115200);
Serial.println(„Test programu CRC-16 CCITT");
Serial.println("============================");
}
05-2016
Zygmunt Kubiak
3
Przykład programu do bezpośredniego wyznaczania CRC16
Program CRC16 cd
void loop()
{
byte data[] = „ Imie Nazwisko";
Serial.println(„Programowe wyznaczanie CRC16");
temp = calcrc((byte*)data, 14);
Serial.print("crc = 0x");
Serial.println(temp, HEX);
while(true);
// blokada cykliczności
}
05-2016
Zygmunt Kubiak
4
Przykład programu do bezpośredniego wyznaczania CRC16
Program CRC16 cd
word calcrc(byte *ptr, int count)
{
word crc;
char i;
crc = 0;
while (--count >= 0)
{
crc = crc ^ (word) *ptr++ << 8;
i = 8;
do
{
if (crc & 0x8000)
crc = crc << 1 ^ 0x1021;
else
crc = crc << 1;
} while(--i);
}
return (crc);
}
05-2016
Zygmunt Kubiak
5
Przykłady kalkulatorów CRC:
http://depa.usst.edu.cn/chenjq/www2/software/crc/CRC_Ja
vascript/CRCcalculation.htm
lub: http://www.zorc.breitbandkatze.de/crc.html
lub np.: http://www.lammertbies.nl/comm/info/crccalculation.html#intr
05-2016
Zygmunt Kubiak
6
AES128
05-2016
Zygmunt Kubiak
7
Skopiować do folderu libraries bibliotekę ze strony:
https://github.com/DavyLandman/AESLib
Do szkicu dodać: #include <AESLib.h>
Biblioteka AESLib zawiera między innymi następujące metody:
// Szyfrowanie wielu 128 bitowych bloków danych, data_len podzielne mod 16
// key oraz iv mają długość 128 bitów, tzn. 16 bajtów (typ const uint8_t)
void aes128_cbc_enc(const uint8_t* key, const uint8_t* iv, void* data,
const uint16_t data_len);
// Szyfrowanie pojedynczego bloku 128 bitów, tzn. 16 bajtów (typ uint8_t)
// Klucz oraz ma długość 128 bitów, tzn. 16 bajtów (typ const uint8_t)
void aes128_enc_single(const uint8_t* key, void* data);
05-2016
Zygmunt Kubiak
8
// Deszyfrowanie wielu 128 bitowych bloków danych, data_len podzielne mod 16
// key oraz iv mają długość 128 bitów, tzn. 16 bajtów (typ const uint8_t)
void aes128_cbc_dec(const uint8_t* key, const uint8_t* iv, void*
data, const uint16_t data_len);
// Deszyfrowanie pojedynczego bloku 128 bitów, tzn. 16 bajtów (typ uint8_t)
// Klucz oraz ma długość 128 bitów, tzn. 16 bajtów (typ const uint8_t)
void aes128_dec_single(const uint8_t* key, void* data);
05-2016
Zygmunt Kubiak
9
Przykład użycia biblioteki AESLib
#include <AESLib.h>
void setup()
{
Serial.begin(11520);
}
void loop()
{
uint8_t key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
char data[] = "**Imie Nazwisko*"; //16 znaków == 16 bajtów
aes128_enc_single(key, data);
Serial.print("Blok zaszyfrowany:");
Serial.println(data);
aes128_dec_single(key, data);
Serial.print("Blok rozszyfrowany:");
Serial.println(data);
delay(15000);
// czas powtarzania
}
05-2016
Zygmunt Kubiak
10
Dziękuję
Zygmunt Kubiak
11
09200
6

Podobne dokumenty