# Magic Encryption

**Cihazdaki bir değer diskte okunamaz kalsın.**

Magic framework uygulamaları için AES-256-CBC, `Crypt` facade'i üzerinden. Payload'lar doğrulanmaz ve Laravel'in encrypter'ı ile uyumlu değildir.

## Tek facade. İki anahtar.

`Crypt`, `APP_KEY` ile ya da Vault'ta tutulan cihaz başına bir anahtarla şifreler. Değeri diskte okunamaz tutar; doğrulamaz.

### Şifrele ve çöz

`Crypt.encrypt(value)` ve `Crypt.decrypt(payload)` uygulama anahtarını kullanır: AES-256, CBC modu ve PKCS7 padding.

[Daha fazla Şifrele ve çöz hakkında](https://anilcancakir.com/magic/docs/encryption/basics/crypt.md)

### Uygulama anahtarı

Anahtar 32 ham karakter ya da 32 byte'a çözülen bir `base64:` değeridir. Encrypter onu `app.key` üzerinden lazy olarak çözümler. Anahtar her build'in içinde gider; değeri uygulamaya sahip olmayandan gizler, build'i açandan değil.

[Daha fazla Uygulama anahtarı hakkında](https://anilcancakir.com/magic/docs/encryption/basics/app-key.md)

### Cihaz başına anahtar

`Crypt.encryptWithDeviceKey` ve `Crypt.decryptWithDeviceKey`, Vault'ta tutulan anahtarı kullanır. Ömrünü `hasDeviceKey`, `generateDeviceKey` ve `clearDeviceKey` yönetir.

[Daha fazla Cihaz başına anahtar hakkında](https://anilcancakir.com/magic/docs/encryption/basics/device-key.md)

### Payload biçimi

Her çağrı yeni rastgele 16 byte'lık bir IV kullanır; payload `base64(iv):base64(ciphertext)` biçimindedir. MAC, key id ve rotation yoktur; Laravel formatı da değildir.

[Daha fazla Payload biçimi hakkında](https://anilcancakir.com/magic/docs/encryption/guides/wire-format.md)

### Hatalar exception'dır

Çözülemeyen bir payload `MagicDecryptException` fırlatır. Boş string şifrelemek `RangeError` fırlatır.

[Daha fazla Hatalar exception'dır hakkında](https://anilcancakir.com/magic/docs/encryption/basics/crypt.md)

### Anahtarı üretin

`dart run magic:dowel key:generate`, `APP_KEY=base64:...` satırını `.env` dosyasına yazar; `--show` verirseniz anahtar `.env` dosyasına yazılmaz, ekrana basılır. Var olan anahtarın yerine geçer; eski anahtarla şifrelenmiş değerler okunamaz olur.

[Daha fazla Anahtarı üretin hakkında](https://anilcancakir.com/magic/docs/encryption/basics/app-key.md)

## Saniyeler içinde ekleyin

```bash
flutter pub add magic_encryption
```

Ya da `pubspec.yaml` dosyasına ekleyin:

```yaml
dependencies:
  magic_encryption: ^1.0.2
```

Ya da yapay zeka ajanınıza şu istemi verin:

```text
https://anilcancakir.com/magic/docs/encryption/llms.txt adresini oku ve Magic Encryption paketini bu projeye kur.
```

## Dokümanlar

### Getting Started

- [Installation](https://anilcancakir.com/magic/docs/encryption/getting-started/installation.md)

### The Basics

- [Crypt](https://anilcancakir.com/magic/docs/encryption/basics/crypt.md)
- [App Key](https://anilcancakir.com/magic/docs/encryption/basics/app-key.md)
- [Device Key](https://anilcancakir.com/magic/docs/encryption/basics/device-key.md)

### Guides

- [Wire Format](https://anilcancakir.com/magic/docs/encryption/guides/wire-format.md)
- [Testing](https://anilcancakir.com/magic/docs/encryption/guides/testing.md)
