---
title: "Šifrovanie a haše"
description: "Šifrovanie v skripte TapHome: AES-128, AES-192 a AES-256 v režime ECB a CBC, doplnenie (padding), haše MD5 a SHA, podpisy HMAC a bezpečné náhodné bajty pre iv."
url: "https://taphome.com/sk/docs/script/encryption-and-hashes/"
language: sk
lastmod: 2026-11-06
generator: hugo
ai:
  topics: ["encryption","hashes","packet-parser","scripting-language"]
  questions: ["Ako v skripte TapHome zašifrujem alebo dešifrujem dáta AES?","Ako v skripte TapHome podpíšem požiadavku cez HMAC-SHA256?","Ako v skripte TapHome vytvorím náhodný iv?","Akú verziu Core potrebujú šifrovacie funkcie?"]
---

# Šifrovanie a haše

Funkcie skriptu TapHome pre šifrované a podpísané protokoly zariadení: AESENCRYPT a AESDECRYPT, HASH a HMAC s MD5 a SHA, RANDBYTES a príklad brány Bosch KM200.

Posledná aktualizácia: 2026-11-06

Šifrovacie a hašovacie funkcie zostavia to, čo očakáva zariadenie so šifrovaným alebo podpísaným lokálnym rozhraním: šifrovanie AES, haše MD5 a SHA, podpisy HMAC a bezpečné náhodné bajty. Iba zostavujú hodnoty, takže fungujú v každom skripte. Všetky potrebujú TapHome Next 2026.1.40991+. Base64, hexadecimálny text a kontrolné súčty CRC sú na stránke [Kódovanie bajtov a kontrolné súčty](https://taphome.com/sk/docs/script/byte-encodings/).

Prijímajú **bajtové dáta**: `collection<uint8>`, blob alebo reťazec. Reťazec sa použije ako bajty ISO-8859-1. Na rozdiel od [TOBYTES](https://taphome.com/sk/docs/script/data-type-conversions/#tobytes) bez kódovania, ktorá iné znaky zmení na `?`, je tu znak mimo ISO-8859-1 chybou — pre UTF-8 odovzdajte `TOBYTES(text, "utf-8")`. Výsledok je `collection<uint8>`.

## HASH, HMAC

`HASH` vypočíta haš bajtových dát, `HMAC` ich haš s kľúčom (podpis).

```text
HASH(data, algorithm)
HMAC(key, data, algorithm)
```

| Názov | Popis |
|---|---|
| `data` | Bajtové dáta na hašovanie. |
| `key` | Kľúč funkcie `HMAC`, bajtové dáta. |
| `algorithm` | `"MD5"`, `"SHA1"`, `"SHA256"` alebo `"SHA512"`, na veľkosti písmen nezáleží; prijímajú sa aj `"SHA-1"`, `"SHA-256"` a `"SHA-512"`. |

**Návratová hodnota** — `collection<uint8>` so 16, 20, 32 alebo 64 bajtmi.

**Poznámky** — `HMAC` berie kľúč ako prvý, v rovnakom poradí ako `hmac.new(key, msg, digest)` v Pythone.

**Príklad**

```taphome
TOHEX(HASH("abc", "MD5"));
# Result: "900150983cd24fb0d6963f7d28e17f72"
TOHEX(HMAC("Jefe", "what do ya want for nothing?", "SHA256"));
# Result: "5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843"
```

**Chyby** — *HASH Unknown algorithm. Valid values are 'MD5', 'SHA1', 'SHA256', 'SHA512'*; *HASH - data contains characters outside ISO-8859-1, convert the text with TOBYTES(text, "utf-8")*; *HASH - data must be a uint8 collection, a blob or a string*. Hlásenia funkcie `HMAC` začínajú jej vlastným názvom a menujú argument.

**Dostupnosť** — TapHome Next 2026.1.40991+.

## AESENCRYPT, AESDECRYPT

`AESENCRYPT` zašifruje bajtové dáta algoritmom AES, `AESDECRYPT` ich dešifruje.

```text
AESENCRYPT(data, key, mode [, iv])
AESDECRYPT(data, key, mode [, iv])
```

| Názov | Popis |
|---|---|
| `data` | Bajtové dáta. Dáta pre `AESDECRYPT` musia mať dĺžku, ktorá je násobkom 16 bajtov. |
| `key` | 16, 24 alebo 32 bajtov: AES-128, AES-192 alebo AES-256. |
| `mode` | `"ECB"` alebo `"CBC"`, za ktorým môže nasledovať doplnenie, napríklad `"CBC/PKCS7"` alebo `"ECB/ZEROS"`; na veľkosti písmen nezáleží. |
| `iv` | 16 bajtov, povinný pri `CBC`. `ECB` ho neberie — argument vynechajte alebo odovzdajte `Null`. |

| Doplnenie (padding) | `AESENCRYPT` | `AESDECRYPT` |
|---|---|---|
| `/PKCS7` (predvolené; `/PKCS5`, názov z Javy, znamená to isté) | Pridá doplnenie. | Odstráni ho. |
| `/ZEROS` | Doplní posledný blok bajtmi `0x00`; dáta, ktoré už končia na hranici bloku, nedostanú nič, prázdne dáta ostanú prázdne. | Odstráni všetky koncové bajty `0x00`, aj tie, ktoré patria k dátam — použite ho pre text, napríklad JSON. |
| `/NONE` | Bez doplnenia; dĺžka dát musí byť násobkom 16 bajtov. | Neodstráni nič. |

**Návratová hodnota** — `collection<uint8>`.

**Poznámky** — Zlý kľúč dokáže odhaliť len `/PKCS7`, a ani to vždy; pri `/ZEROS` a `/NONE` vráti zlý kľúč zlé bajty bez chyby. Zlý `iv` v režime `CBC` pokazí len prvých 16 bajtov a nikdy sa nenahlási.

**Príklad**

```taphome
# kľúč a iv ako bajty
VAR key := BYTECOLLECTION("2b7e151628aed2a6abf7158809cf4f3c");
VAR iv := BYTECOLLECTION("000102030405060708090a0b0c0d0e0f");
# zašifruj text
VAR secret := AESENCRYPT("Hello World", key, "CBC", iv);
# dešifruj a vráť text
TOSTRING(AESDECRYPT(secret, key, "CBC", iv));
# Result: "Hello World"
```

**Chyby** — *AESDECRYPT - decryption failed, check the key, the iv and the padding* (doplnenie `/PKCS7` nesedí: zlý kľúč alebo dáta, ktoré neboli zašifrované s PKCS7); *AESENCRYPT - key must be 16, 24 or 32 bytes long (AES-128, AES-192, AES-256), it is N*; *AESENCRYPT - CBC mode needs a 16-byte iv, it is N*; *AESENCRYPT - ECB mode does not use an iv, leave the argument out*; *AESENCRYPT Unknown mode. Valid values are 'ECB', 'CBC', optionally followed by '/PKCS7' (or '/PKCS5'), '/ZEROS' or '/NONE'*; *AESENCRYPT - with padding NONE the data length must be a multiple of 16 bytes, it is N*; *AESDECRYPT - encrypted data length must be a multiple of 16 bytes, it is N*. Každá funkcia uvádza v hlásení svoj názov.

**Dostupnosť** — TapHome Next 2026.1.40991+.

## RANDBYTES

`RANDBYTES` vráti kryptograficky bezpečné náhodné bajty — pre `iv` režimu `CBC`, nonce alebo kľúč relácie.

```text
RANDBYTES(count)
```

**Návratová hodnota** — `collection<uint8>` s `count` bajtmi, 1 až 2048; to isté ako `secrets.token_bytes(n)` alebo `os.urandom(n)` v Pythone.

**Poznámky**

- [RAND a RANDINT](https://taphome.com/sk/docs/script/rounding-and-random/#rand) nie sú bezpečné a na kľúč, `iv` ani nonce sa nesmú použiť.
- Premenná s kolekciou priradená do inej premennej je tá istá kolekcia, preto pred `APPEND` urobte `COPY` — inak narastie aj `iv`.

**Príklad — nový iv pred zašifrovanými dátami, ako ho posiela mnoho protokolov**

```taphome
# kľúč a nový náhodný iv
VAR key := FROMHEX("2b7e151628aed2a6abf7158809cf4f3c");
VAR iv := RANDBYTES(16);
# telo začni ivom
VAR body := COPY(iv);
# pripoj zašifrované dáta
APPEND(body, AESENCRYPT("Hello World", key, "CBC", iv));
# oddeľ iv, dešifruj, vráť text
TOSTRING(AESDECRYPT(COPY(body, 16), key, "CBC", COPY(body, 0, 16)));
# Result: "Hello World"
```

**Chyby** — *RANDBYTES: count must be between 1 and 2048*.

**Dostupnosť** — TapHome Next 2026.1.40991+.

## Príklad — brána Bosch / Buderus KM200

HTTP rozhranie brány Bosch / Buderus KM200, ktorú používa aj IVT Rego 2000, tak, ako ho opisujú komunitné projekty (výrobca ho nezverejňuje). Telo odpovede je Base64 z dát AES-256-ECB doplnených nulami a kľúč sa skladá z dvoch hašov MD5:

```taphome
VAR salt := BYTECOLLECTION("00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff");  # 32-bajtová soľ výrobcu
VAR k1 := TOBYTES(REPLACE("xxxx-xxxx-xxxx-xxxx", "-", ""));    # heslo brány
APPEND(k1, salt);
VAR k2 := COPY(salt);
APPEND(k2, TOBYTES("my private password"));
VAR key := HASH(k1, "MD5");
APPEND(key, HASH(k2, "MD5"));                                  # 32 bajtov = AES-256

VAR r := SENDHTTPREQUEST("/system/healthStatus", "GET", "", "User-Agent: TeleHeater/2.2.3");
# value = premenná modulu, ktorá uchováva výsledok
IF r.IsSuccess
    value := PARSEJSON(TOSTRING(AESDECRYPT(FROMBASE64(r.Content), key, "ECB/ZEROS"), "utf-8"), "value");
ELSE
    ADDERROR(r.StatusCode + " (" + r.ReasonPhrase + ")");
END
```

**Pozrite aj** — [Funkcie Packet parsera](https://taphome.com/sk/docs/script/packet-parser/), [Kódovanie bajtov a kontrolné súčty](https://taphome.com/sk/docs/script/byte-encodings/), [Text a kolekcie](https://taphome.com/sk/docs/script/text-string-and-byte-array/).
