Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?


Failed to load latest commit information.
Latest commit message
Commit time


A C# implementation of the AESCrypt file format.

This .NET AES Crypt package contains the C# class SharpAESCrypt.SharpAESCrypt, which provides file encryption and decryption using aescrypt file format.

Version 2 of the AES File Format is supported for reading and writing. Versions 0 and 1 are not verified, but there is code to read and write the formats.


If you use NuGet you can install SharpAESCrypt from NuGet.

You can download either the commandline executable version or the dll library version.


The SharpAESCrypt package works with .NET 2.0+, and is tested with:

Windows, Microsoft.Net, 32bit and 64bit Linux, various distrbutions, Mono 2.6+, 32bit and 64bit OSX 10.6+, Mono 2.6+, 32bit and 64bit

Besides a CLI runtime, no further dependencies are required.

The 1.3.3 version is built targeting the .netstandard2.0 profile and works with .Net Framwork 4.6 and .netcoreapp2.0.

Using From the Command Line

Windows, Microsoft.Net

SharpAESCrypt.exe e|d password fromPath toPath

Mono, Any platform

mono SharpAESCrypt.exe e|d password fromPath toPath

Operation mode is selected with (e)ncrypt or (d)ecrypt.

Using as a library in a project

Simply add a reference to SharpAESCrypt.dll, and you can use the static methods like this:

SharpAESCrypt.Encrypt("password", "inputfile", "outputfile");
SharpAESCrypt.Decrypt("password", "inputfile", "outputfile");
SharpAESCrypt.Encrypt("password", inputStream, outputStream);
SharpAESCrypt.Decrypt("password", inputStream, outputStream);

The syntax is for C# but the DLL works with any supported .NET language.

For more advanced uses, you can create a stream like this:

Stream aesStream = new SharpAESCrypt(password, inputStream, mode);

You can set various properties on the stream. Remember to either call Dispose() or FlushFinalBlock() after using the stream.

See the documentation provided with the library for further details.