> For the complete documentation index, see [llms.txt](https://docs.mluvii.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.mluvii.com/pro-it-specialisty/softwarova-architektura/sifrovani.md).

# Š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);
```
