# Magic Encryption documentation > Magic Encryption keeps a value opaque at rest on the device: AES-256-CBC through the Crypt facade, with the app key or a per-device key in Vault. ## Getting Started - [Installation](https://anilcancakir.com/magic/docs/encryption/getting-started/installation.md): Add magic_encryption to a Magic app, register its provider, create APP_KEY and check that Crypt answers. ## The Basics - [Crypt](https://anilcancakir.com/magic/docs/encryption/basics/crypt.md): Encrypt and decrypt strings with the app key through the Crypt facade, and know what fails. - [App Key](https://anilcancakir.com/magic/docs/encryption/basics/app-key.md): The app.key that Crypt.encrypt and Crypt.decrypt use, the two formats it accepts, how key:generate writes it and what changing it costs. - [Device Key](https://anilcancakir.com/magic/docs/encryption/basics/device-key.md): Encrypt with a key generated on the device and kept in Vault, so a value stored locally cannot be opened anywhere else. ## Guides - [Wire Format](https://anilcancakir.com/magic/docs/encryption/guides/wire-format.md): The exact bytes Crypt and MagicEncrypter write, what they do not guarantee and how they differ from Laravel's Crypt. - [Testing](https://anilcancakir.com/magic/docs/encryption/guides/testing.md): Test code that calls Crypt without a device, a keychain or a mocking library. ## Optional - [Magic Encryption](https://anilcancakir.com/magic/encryption): the package landing page - [Full documentation](https://anilcancakir.com/magic/docs/encryption/llms-full.txt): every page in one file