# Šifrování

**Zašifrování pomocí certifikátu bez HMAC**

1. krok - Máte požadovaná data v JSON Stringu
2. krok - Převedete JSON String do UTF8 Byte array
3. krok - UTF8 Byte array zašifrujete do PKCS7 Envelope pomocí veřejného klíče (Certifikát ke stažení [zde](https://app.mluvii.com/Admin/CallDataProtection/EncryptionCertificate))
4. krok - Získaný Byte array převedete do Base64

```
    //Kroky 3 a 4
    public static string EncryptByteArray(byte[] plainTextPayload, Org.BouncyCastle.X509.X509Certificate cert)
        {

            var random = new Org.BouncyCastle.Security.SecureRandom();
            var generator = new Org.BouncyCastle.Cms.CmsEnvelopedDataGenerator(random);

            generator.AddKeyTransRecipient(cert);

            var envelopedData = generator.Generate(new Org.BouncyCastle.Cms.CmsProcessableByteArray(plainTextPayload), Org.BouncyCastle.Cms.CmsEnvelopedGenerator.Aes256Cbc);
            return Convert.ToBase64String(envelopedData.GetEncoded());
        }
```

5\. krok - Výsledný Base64 String vložím do widgetu pomocí metody setProtectedData(Base64String)

```js
owidget.setProtectedData(Base64String);
```

**Zašifrování pomocí certifikátu s HMAC**

1. krok - Kontaktujte mluvii a vyžádejte si base64string HMAC klíč pro svoji společnost / Pošlete mluvii base64string HMAC klíč pro svoji společnost
2. krok - Máte požadovaná data v JSON Stringu
3. krok - Převedete JSON String do UTF8 Byte array
4. krok - UTF8 Byte array zašifrujete do PKCS7 Envelope pomocí veřejného klíče (Certifikát ke stažení [zde](https://app.mluvii.com/Admin/CallDataProtection/EncryptionCertificate))
5. krok - Získaný Byte array převedete do Base64

```
    // Kroky 4 a 5
    public static string EncryptByteArray(byte[] plainTextPayload, Org.BouncyCastle.X509.X509Certificate cert)
        {

            var random = new Org.BouncyCastle.Security.SecureRandom();
            var generator = new Org.BouncyCastle.Cms.CmsEnvelopedDataGenerator(random);

            generator.AddKeyTransRecipient(cert);

            var envelopedData = generator.Generate(new Org.BouncyCastle.Cms.CmsProcessableByteArray(plainTextPayload), Org.BouncyCastle.Cms.CmsEnvelopedGenerator.Aes256Cbc);
            return Convert.ToBase64String(envelopedData.GetEncoded());
        }
```

4\. krok - Pomocí klíče zahašuji byte array z kroku 3

```
    public static string ComputeAuthentication(byte[] plainTextPayload, string base64Hmac)
        {
            var key =  Convert.FromBase64String(base64Hmac);

            var hmac = new Org.BouncyCastle.Crypto.Macs.HMac(new Org.BouncyCastle.Crypto.Digests.Sha256Digest());
            var result = new byte[hmac.GetMacSize()];

            hmac.Init(new Org.BouncyCastle.Crypto.Parameters.KeyParameter(key));
            hmac.BlockUpdate(plainTextPayload, 0, plainTextPayload.Length);
            hmac.DoFinal(result, 0);

            return Convert.ToBase64String(result);
        }
```

5\. krok - Výsledné base64Stringy vložím do widgetu pomocí metody setProtectedData(Base64String)

```js
owidget.setProtectedData(Base64String,ComputedBase64Hmac);
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mluvii.com/pro-it-specialisty/softwarova-architektura/sifrovani.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
