SubstitutionCiphers 2.1.0
dotnet add package SubstitutionCiphers --version 2.1.0
NuGet\Install-Package SubstitutionCiphers -Version 2.1.0
<PackageReference Include="SubstitutionCiphers" Version="2.1.0" />
<PackageVersion Include="SubstitutionCiphers" Version="2.1.0" />
<PackageReference Include="SubstitutionCiphers" />
paket add SubstitutionCiphers --version 2.1.0
#r "nuget: SubstitutionCiphers, 2.1.0"
#:package SubstitutionCiphers@2.1.0
#addin nuget:?package=SubstitutionCiphers&version=2.1.0
#tool nuget:?package=SubstitutionCiphers&version=2.1.0
Griffinere Cipher 🔐
The Griffinere cipher is a custom encryption algorithm in C# designed for reversible, base64-normalized encryption using a repeating key. Inspired by the Vigenère cipher, it adds configurable alphabet support, input validation, and padding-based encryption length enforcement.
📦 Installation
Install from the Nuget Library:
dotnet add package SubstitutionCiphers
In your code:
using Ciphers;
✨ Features
🔐 Encrypts and decrypts alphanumeric or custom alphabet-based strings
🔐 Double pass-through encryption, which allows for a second passthrough of the encryption method for additional obfuscation
🧩 Allows defining your own alphabet
📏 Supports minimum-length encrypted responses via padding
✅ Includes strong validation for alphabet and key integrity
🧪 Unit tested with xUnit
🧰 Usage
1.1: Creating the Cipher Using the default alphabet:
const string key = "YourSecureKey";
Griffinere cipher = new(key);
Default alphabet includes:
A-Z
a-z
0-9
1.2: Creating the Cipher Using a custom alphabet:
const string customAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ12345";
const string key = "YOURKEY";
Griffinere cipher = new(customAlphabet, key);
Alphabet Rules
- Must not contain . (dot character)
- All characters must be unique
- All characters in the key must exist in the alphabet
2.1: Encrypt a String
Griffinere cipher = new("nGOvtaRXyMEtCOO9");
string plainText = "Hello World 123";
string encrypted = cipher.EncryptString(plainText);
//outputs: sjnyIdM trIKZ3v 0m7m
2.2: Encrypt a String with Minimum Length
Griffinere cipher = new("nGOvtaRXyMEtCOO9");
const string plainText = "Hello World 123";
string encrypted = cipher.EncryptString(plainText, minimumResponseLength: 24);
//outputs: w5WFeRLvJ1q.sjnyIdM trIKZ3v 0m7m.c
2.3: Encrypt with Double Pass Through
Griffinere cipher = new("dShHPpUQTihcn7ju1wjYTAD1dvbrPKdT", isEnableDoublePassThrough: true);
const string plainText = "ThisIsAnExampleOfDoublePassThrough";
string encrypted = cipher.EncryptString(plainText, minimumResponseLength: 48);
//outputs: 90d9Hm1jNk31aDLO8ksiQagRDTlRkEenY0FqyReoJ9Vic3wbx15BHowoq2zifhyW5cspbWAx3jQYAxAIc0QkrS5cxm
3.1: Decrypt a String
string decrypted = cipher.DecryptString(encrypted);
// Returns the original plain text
⚠️ Exceptions and Validations
Tables
Condition | Exception |
---|---|
Alphabet contains . | ArgumentException |
Alphabet has duplicate characters | ArgumentException |
Alphabet does not contain at least 3 unique characters | ArgumentException |
Key does not contain at least 3 unique characters | ArgumentException |
Key contains characters not in alphabet | ArgumentException |
Specifying minimum length < 1 | ArgumentOutOfRangeException |
📄 License
MIT License © 2025 Riley Griffin
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.