AESCrypt

Read and write files in AES Crypt format.

Usage

iex(1)> AESCrypt.write("example.aes", "Hello, world!", "supersecret")
:ok
iex(2)> AESCrypt.read("example.aes", "supersecret")
{:ok, "Hello, world!", [{"CREATED_BY", "Elixir AESCrypt v0.1.0"}]}
iex(3)> AESCrypt.read!("example.aes", "supersecret")
"Hello, world!"

Limitations

  • The password KDF used by the AES Crypt file format is quite weak by modern standards, potentially allowing brute-force attacks on the passphrase; this is a limitation of the file format, not of this implementation; use a strong passphrase to mitigate the risk, and consider alternative storage formats for highly sensitive data
  • Supports v2 format only
  • Decrypts/encrypts entire contents in memory; no streaming
  • No attempts are made to protect keying material: the passphrase, derived key, file-specific key and plaintext may leak in stack traces, crashdumps, or BEAM introspection functions

Installation

The package can be installed by adding aes_crypt to your list of dependencies in mix.exs:

def deps do
  [
    {:aes_crypt, "~> 0.1.0"}
  ]
end

Documentation can be found at https://hexdocs.pm/aes_crypt.