---
title: "Titkosítás és hash-ek"
description: "Titkosítás a TapHome szkriptben: AES-128, AES-192 és AES-256 ECB és CBC módban, kitöltés (padding), MD5 és SHA hash-ek, HMAC aláírások és biztonságos véletlen bájtok egy iv-hez."
url: "https://taphome.com/hu/docs/script/encryption-and-hashes/"
language: hu
lastmod: 2026-11-06
generator: hugo
ai:
  topics: ["encryption","hashes","packet-parser","scripting-language"]
  questions: ["Hogyan titkosíthatok vagy fejthetek vissza AES adatokat egy TapHome szkriptben?","Hogyan írhatok alá egy kérést HMAC-SHA256-tal egy TapHome szkriptben?","Hogyan hozhatok létre véletlen iv-t egy TapHome szkriptben?","Milyen Core verzió kell a titkosító függvényekhez?"]
---

# Titkosítás és hash-ek

TapHome szkriptfüggvények titkosított és aláírt eszközprotokollokhoz: AESENCRYPT és AESDECRYPT, HASH és HMAC MD5-tel és SHA-val, RANDBYTES, valamint egy Bosch KM200 példa.

Utoljára frissítve: 2026-11-06

A titkosító és hash-függvények azt állítják elő, amit egy titkosított vagy aláírt helyi felületű eszköz vár: AES titkosítást, MD5 és SHA hash-eket, HMAC aláírásokat és biztonságos véletlen bájtokat. Csak értékeket állítanak elő, ezért minden szkriptben működnek. Mindegyikhez TapHome Next 2026.1.40991+ szükséges. A Base64, a hexadecimális szöveg és a CRC ellenőrzőösszegek a [Bájtkódolások és ellenőrzőösszegek](https://taphome.com/hu/docs/script/byte-encodings/) oldalon vannak.

**Bájtadatokat** fogadnak: `collection<uint8>` gyűjteményt, blobot vagy szöveget. A szöveg ISO-8859-1 bájtokként kerül felhasználásra. A kódolás nélküli [TOBYTES](https://taphome.com/hu/docs/script/data-type-conversions/#tobytes) függvénnyel ellentétben, amely a többi karaktert `?` jellé alakítja, itt az ISO-8859-1-en kívüli karakter hiba — UTF-8-hoz add át a `TOBYTES(text, "utf-8")` értéket. Az eredmény `collection<uint8>`.

## HASH, HMAC

A `HASH` a bájtadatok hash-ét számolja, a `HMAC` a kulcsos hash-üket (aláírást).

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

| Név | Leírás |
|---|---|
| `data` | A hash-elendő bájtadatok. |
| `key` | A `HMAC` kulcsa, bájtadatok. |
| `algorithm` | `"MD5"`, `"SHA1"`, `"SHA256"` vagy `"SHA512"`, a kis- és nagybetű nem számít; a `"SHA-1"`, `"SHA-256"` és `"SHA-512"` is elfogadott. |

**Visszatérési érték** — 16, 20, 32 vagy 64 bájtos `collection<uint8>`.

**Megjegyzések** — A `HMAC` elsőként a kulcsot veszi át, ugyanabban a sorrendben, mint a Python `hmac.new(key, msg, digest)` függvénye.

**Példa**

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

**Hibák** — *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*. A `HMAC` üzenetei a saját nevével kezdődnek, és megnevezik az argumentumot.

**Elérhetőség** — TapHome Next 2026.1.40991+.

## AESENCRYPT, AESDECRYPT

Az `AESENCRYPT` AES-sel titkosítja a bájtadatokat, az `AESDECRYPT` visszafejti őket.

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

| Név | Leírás |
|---|---|
| `data` | Bájtadatok. Az `AESDECRYPT` adatainak hossza 16 bájt többszöröse kell, hogy legyen. |
| `key` | 16, 24 vagy 32 bájt: AES-128, AES-192 vagy AES-256. |
| `mode` | `"ECB"` vagy `"CBC"`, amelyet a kitöltés követhet, például `"CBC/PKCS7"` vagy `"ECB/ZEROS"`; a kis- és nagybetű nem számít. |
| `iv` | 16 bájt, a `CBC` megköveteli. Az `ECB` nem használ ilyet — hagyd ki az argumentumot, vagy adj át `Null` értéket. |

| Kitöltés (padding) | `AESENCRYPT` | `AESDECRYPT` |
|---|---|---|
| `/PKCS7` (alapértelmezett; a `/PKCS5`, a Java-beli név, ugyanazt jelenti) | Hozzáadja a kitöltést. | Eltávolítja. |
| `/ZEROS` | Az utolsó blokkot `0x00` bájtokkal tölti fel; a blokkhatáron már végződő adat nem kap semmit, az üres adat üres marad. | Eltávolítja az összes záró `0x00` bájtot, azokat is, amelyek az adathoz tartoznak — szöveghez, például JSON-hoz használd. |
| `/NONE` | Nincs kitöltés; az adat hosszának 16 bájt többszörösének kell lennie. | Nem távolít el semmit. |

**Visszatérési érték** — `collection<uint8>`.

**Megjegyzések** — Hibás kulcsot csak a `/PKCS7` vehet észre, és az sem mindig; `/ZEROS` és `/NONE` esetén a hibás kulcs hibaüzenet nélkül ad hibás bájtokat. A `CBC` módban a hibás `iv` csak az első 16 bájtot rontja el, és soha nem jelez hibát.

**Példa**

```taphome
# kulcs és iv bájtokként
VAR key := BYTECOLLECTION("2b7e151628aed2a6abf7158809cf4f3c");
VAR iv := BYTECOLLECTION("000102030405060708090a0b0c0d0e0f");
# a szöveg titkosítása
VAR secret := AESENCRYPT("Hello World", key, "CBC", iv);
# visszafejtés és a szöveg visszaadása
TOSTRING(AESDECRYPT(secret, key, "CBC", iv));
# Result: "Hello World"
```

**Hibák** — *AESDECRYPT - decryption failed, check the key, the iv and the padding* (a `/PKCS7` kitöltés nem egyezik: hibás kulcs, vagy nem PKCS7-tel titkosított adat); *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*. Mindegyik függvény a saját nevét írja az üzenetbe.

**Elérhetőség** — TapHome Next 2026.1.40991+.

## RANDBYTES

A `RANDBYTES` kriptográfiailag biztonságos véletlen bájtokat ad vissza — `CBC` módú `iv`-hez, nonce-hoz vagy munkamenetkulcshoz.

```text
RANDBYTES(count)
```

**Visszatérési érték** — `count` bájtos `collection<uint8>`, 1 és 2048 között; ugyanaz, mint a Python `secrets.token_bytes(n)` vagy `os.urandom(n)` függvénye.

**Megjegyzések**

- A [RAND és a RANDINT](https://taphome.com/hu/docs/script/rounding-and-random/#rand) nem biztonságosak, kulcshoz, `iv`-hez vagy nonce-hoz nem szabad használni.
- Egy másik változóhoz rendelt gyűjteményváltozó ugyanaz a gyűjtemény, ezért `APPEND` előtt készíts `COPY` másolatot — különben az `iv` is megnő.

**Példa — új iv a titkosított adat előtt, ahogy sok protokoll küldi**

```taphome
# kulcs és új véletlen iv
VAR key := FROMHEX("2b7e151628aed2a6abf7158809cf4f3c");
VAR iv := RANDBYTES(16);
# a törzs kezdete az iv
VAR body := COPY(iv);
# a titkosított adatok hozzáfűzése
APPEND(body, AESENCRYPT("Hello World", key, "CBC", iv));
# iv leválasztása, visszafejtés, szöveg visszaadása
TOSTRING(AESDECRYPT(COPY(body, 16), key, "CBC", COPY(body, 0, 16)));
# Result: "Hello World"
```

**Hibák** — *RANDBYTES: count must be between 1 and 2048*.

**Elérhetőség** — TapHome Next 2026.1.40991+.

## Példa — Bosch / Buderus KM200 átjáró

Egy Bosch / Buderus KM200 átjáró HTTP felülete, amelyet az IVT Rego 2000 is használ, úgy, ahogy közösségi projektek leírják (a gyártó nem teszi közzé). A válasz törzse nullákkal kitöltött AES-256-ECB adat Base64 alakban, a kulcs pedig két MD5 hash-ből áll:

```taphome
VAR salt := BYTECOLLECTION("00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff");  # 32 bájtos gyártói só
VAR k1 := TOBYTES(REPLACE("xxxx-xxxx-xxxx-xxxx", "-", ""));    # az átjáró jelszava
APPEND(k1, salt);
VAR k2 := COPY(salt);
APPEND(k2, TOBYTES("my private password"));
VAR key := HASH(k1, "MD5");
APPEND(key, HASH(k2, "MD5"));                                  # 32 bájt = AES-256

VAR r := SENDHTTPREQUEST("/system/healthStatus", "GET", "", "User-Agent: TeleHeater/2.2.3");
# value = modulváltozó, amely megőrzi az eredményt
IF r.IsSuccess
    value := PARSEJSON(TOSTRING(AESDECRYPT(FROMBASE64(r.Content), key, "ECB/ZEROS"), "utf-8"), "value");
ELSE
    ADDERROR(r.StatusCode + " (" + r.ReasonPhrase + ")");
END
```

**Lásd még** — [Packet parser függvények](https://taphome.com/hu/docs/script/packet-parser/), [Bájtkódolások és ellenőrzőösszegek](https://taphome.com/hu/docs/script/byte-encodings/), [Szöveg és gyűjtemények](https://taphome.com/hu/docs/script/text-string-and-byte-array/).
