https://github.com/2toad/rijndael256
AES cryptographic library for .NET Framework and .NET Core
https://github.com/2toad/rijndael256
ae aes aes-128 aes-192 aes-256 ciphertext cryptography encrypt-then-mac encryption rijndael
Last synced: about 2 months ago
JSON representation
AES cryptographic library for .NET Framework and .NET Core
- Host: GitHub
- URL: https://github.com/2toad/rijndael256
- Owner: 2Toad
- License: other
- Created: 2016-10-02T17:59:04.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2024-12-16T22:50:37.000Z (over 1 year ago)
- Last Synced: 2026-02-25T08:22:16.551Z (2 months ago)
- Topics: ae, aes, aes-128, aes-192, aes-256, ciphertext, cryptography, encrypt-then-mac, encryption, rijndael
- Language: C#
- Homepage:
- Size: 54.7 KB
- Stars: 33
- Watchers: 5
- Forks: 8
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Rijndael256
[](https://www.nuget.org/packages/Rijndael256/)
[](https://travis-ci.org/2Toad/Rijndael256)
AES cryptographic library for .NET Framework and .NET Core
---
## About
Rijndael256 makes encrypting data and files a breeze with the AES symmetric-key cipher Rijndael.
### Features
* Advanced Encryption Standard (AES)
* Rijndael symmetric-key cipher:
* Encrypt data or files
* AES key sizes:
* 128-bit
* 192-bit
* 256-bit
* CBC Mode
* [Authenticated Encryption (AE)](#authenticated-encryption-ae)
* Encrypt-then-MAC (EtM)
* Cryptographic hashes:
* SHA-512
* PBKDF2
## Quick Start
### Encrypt a string using Rijndael AES 256-bit
```C#
string password = "sKzvYk#1Pn33!YN"; // The password to encrypt the data with
string plaintext = "Top secret data"; // The string to encrypt
// Encrypt the string
string ciphertext = Rijndael.Encrypt(plaintext, password, KeySize.Aes256);
// Decrypt the string
plaintext = Rijndael.Decrypt(ciphertext, password, KeySize.Aes256);
```
### Encrypt a string using [Authenticated Encryption (AE)](#authenticated-encryption-ae)
```C#
string password = "KQpc@HuQ66b$z37"; // The password to encrypt the data with
string plaintext = "Top secret data"; // The string to encrypt
// Encrypt the string
string aeCiphertext = RijndaelEtM.Encrypt(plaintext, password, KeySize.Aes256);
// Decrypt the string
plaintext = RijndaelEtM.Decrypt(aeCiphertext, password, KeySize.Aes256);
```
### Encrypt a file using Rijndael AES 256-bit
```C#
string password = "2zj9cV!50BwJ$A1"; // The password to encrypt the file with
string plaintextFile = @"C:\TopSecretFile.png"; // The file to encrypt
string ciphertextFile = @"C:\SecureFile"; // The encrypted file (extension unnecessary)
// Encrypt the file
Rijndael.Encrypt(plaintextFile, ciphertextFile, password, KeySize.Aes256);
// Decrypt the file
Rijndael.Decrypt(ciphertextFile, plaintextFile, password, KeySize.Aes256);
```
----------
## Settings
The *Settings* object is a collection of mutable defaults used throughout the library. Modification of these defaults is not necessary, but is made available for developers who want finer control of Rijndael256.
| Setting | Description | Default |
|----------------|------------------------------------------------|---------|
| HashIterations | The number of iterations used to derive hashes | 10000 |
### Example
```C#
// The HashIterations setting is used in several places throughout the lib,
// with Rijndael.Encrypt being just one of them. After making this change,
// any future calls to Rijndael.Encrypt will make use of this new value
Settings.HashIterations = 25000;
// To reset all the settings to their default values
Settings.Reset();
```
## Appendix
### Authenticated Encryption (AE)
AE adds an integrity check to the resulting ciphertext, so we can authenticate the ciphertext before decrypting it. Whereas encryption provides confidentiality, AE adds authenticity.
#### Encrypt-then-MAC (EtM)
Rijndael256 offers AE via the EtM encryption mode, which was standardized in ISO/IEC 19772:2009.
##### EtM Workflow
1. **Encryption**:
1. The plaintext is encrypted.
2. A MAC is calculated from the resulting ciphertext.
3. The MAC is appended to the ciphertext.
2. **Decryption**:
1. The MAC is extracted from the ciphertext (Mo).
2. A MAC is calculated from the ciphertext (Mn).
3. The MACs are compared for equality (Mo == Mn)
1. Equal: The ciphertext is decrypted.
2. Not Equal: Authentication has failed -- the decryption process is aborted, with no attempt being made to decrypt the unauthentic ciphertext.