Encryption.Blowfish 2.0.0

dotnet add package Encryption.Blowfish --version 2.0.0
                    
NuGet\Install-Package Encryption.Blowfish -Version 2.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Encryption.Blowfish" Version="2.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Encryption.Blowfish" Version="2.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Encryption.Blowfish" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Encryption.Blowfish --version 2.0.0
                    
#r "nuget: Encryption.Blowfish, 2.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Encryption.Blowfish@2.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Encryption.Blowfish&version=2.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Encryption.Blowfish&version=2.0.0
                    
Install as a Cake Tool

Encryption.Blowfish

Efficient implementation of Blowfish cipher with minimal memory allocations in ECB, CBC and CTR block modes.<br /> CTR is also available as encryption and decryption stream.<br /> Non-stream variants work by mutating input buffer (Span<byte>).

Implemented using defaults, 16-round with pre-computed subkeys.<br /> Tested against well-known test vectors.

Quickstart

nuget package Encryption.Blowfish

dotnet add package Encryption.Blowfish [ -v 2.0.0 ]

Buffer

using Encryption.Blowfish;
using System.Security.Cryptography;

var key = "a3bd614b27864e3f854b971f9df1a802"; // cipher key
var iv = RandomNumberGenerator.GetBytes(8); // IV
byte[] buf = ...; // data you want to encrypt
buf = buf.CopyAndPadIfNotAlreadyPadded();

var cbc = new BlowfishCbc(key);
var ok = cbc.Encrypt(buf, iv);
ok = cbc.Decrypt(buf, iv);

Stream

using Encryption.Blowfish;
using System.Security.Cryptography;

var codec = new Codec(Convert.FromHexString("df83d31539c244d298ce302036f91edd"));
var iv = RandomNumberGenerator.GetBytes(8);

// encrypt
using var encrypted = new MemoryStream();
using (var bfe = new BlowfishCtrEncryptStream(encrypted, codec, iv))
{
    bfe.Write(...);
    bfe.Write(...);
    // ...
}
// It is important to dispose or Close the stream as soon as the writing is finished.

enc.Position = 0;

// decrypt
using var decrypted = new MemoryStream();
using var bfd = new BlowfishCtrDecryptStream(encrypted, codec, iv);
bfd.CopyTo(decrypted);

Available types

type mode usage works on thread-safe
BlowfishEcb ECB Only when forced to. Lack of diffusion. Require padded original data. buffer yes
BlowfishCbc CBC Recommended. Require padded original data. buffer yes
BlowfishCtr CTR Recommended. Works without padding. buffer yes
ParallelBlowfishEcb EBC Only when forced to. Parallel computation from certain data size. Require padded original data. buffer yes
ParallelBlowfishCtr CTR Recommended. Parallel computation from certain data size. Works without padding. buffer yes
BlowfishCtrEncryptStream CTR Only when you need stream-sematics; otherwise you are better off with input buffer variants. stream no
BlowfishCtrDecryptStream CTR dtto stream no
Product 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 is compatible.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

    • No dependencies.
  • 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.

Version Downloads Last Updated
2.0.0 194 2/16/2026
1.0.1 3,243 10/21/2022
1.0.0 337 10/21/2022