Gapotchenko.FX.Security.Cryptography
2026.8.3
Prefix Reserved
dotnet add package Gapotchenko.FX.Security.Cryptography --version 2026.8.3
NuGet\Install-Package Gapotchenko.FX.Security.Cryptography -Version 2026.8.3
<PackageReference Include="Gapotchenko.FX.Security.Cryptography" Version="2026.8.3" />
<PackageVersion Include="Gapotchenko.FX.Security.Cryptography" Version="2026.8.3" />
<PackageReference Include="Gapotchenko.FX.Security.Cryptography" />
paket add Gapotchenko.FX.Security.Cryptography --version 2026.8.3
#r "nuget: Gapotchenko.FX.Security.Cryptography, 2026.8.3"
#:package Gapotchenko.FX.Security.Cryptography@2026.8.3
#addin nuget:?package=Gapotchenko.FX.Security.Cryptography&version=2026.8.3
#tool nuget:?package=Gapotchenko.FX.Security.Cryptography&version=2026.8.3
Overview
The module provides an extended set of cryptography primitives and algorithms for .NET.
ARC4
ARC4 (Alleged Rivest Cipher 4 also known as ARCFOUR or RC4) is a stream cipher. While it is remarkable for its simplicity and performance, nowadays its usage is limited due to discovered limitations and vulnerabilities.
Still, ARC4 may be a good enough fit for less sensitive tasks. For example, it can be used for communication with legacy or energy-constrained systems.
Example:
using Gapotchenko.FX.Security.Cryptography;
byte[] messageToEncrypt = ...;
byte[] key = ...;
// Encryption
byte[] encryptedMessage;
using (var arc4 = Arc4.Create())
{
arc4.Key = key;
var ms = new MemoryStream();
using (var cryptoStream = new CryptoStream(ms, arc4.CreateEncryptor(), CryptoStreamMode.Write))
cryptoStream.Write(messageToEncrypt, 0, messageToEncrypt.Length);
encryptedMessage = ms.ToArray();
}
// Decryption
byte[] decryptedMessage;
using (var arc4 = Arc4.Create())
{
arc4.Key = key;
var ms = new MemoryStream();
using (var cryptoStream = new CryptoStream(ms, arc4.CreateDecryptor(), CryptoStreamMode.Write))
cryptoStream.Write(encryptedMessage, 0, encryptedMessage.Length);
decryptedMessage = ms.ToArray();
}
Unapproved Algorithms
Some cryptographic algorithms are retained for compatibility with legacy systems and data formats even though they are no longer approved for general-purpose cryptographic use.
The module provides corresponding Unapproved classes for such cases:
Arc4UnapprovedDESUnapprovedMD5UnapprovedTripleDESUnapproved
These algorithms are intended for scenarios where old data, protocols, or formats must still be processed. They may be used in FIPS-restricted environments when the user explicitly permits such usage for compatibility purposes.
Cryptography Policy
CryptographyPolicy class provides information about the effective cryptographic policy of the current environment.
Its AllowOnlyFipsAlgorithms property indicates whether only FIPS-approved cryptographic algorithms are allowed by the host operating system, runtime environment, cryptographic providers, or by the application itself.
An application can call CryptographyPolicy.EnforceOnlyFipsAlgorithms() to opt into a FIPS-only policy for the lifetime of the current process.
This is useful for gradual FIPS conformity: the application can use approved algorithms by default, while still routing explicitly approved legacy compatibility operations through Unapproved algorithm factories.
Example:
using Gapotchenko.FX.Security.Cryptography;
using System.Security.Cryptography;
// The application opts into FIPS-only behavior.
CryptographyPolicy.EnforceOnlyFipsAlgorithms();
byte[] data = ...;
bool userPermitsLegacyMd5 = ...;
byte[] digest;
if (userPermitsLegacyMd5)
{
// Compatibility path for old data formats that require MD5.
using var md5 = MD5Unapproved.Create();
digest = md5.ComputeHash(data);
}
else
{
// FIPS-approved default path.
using var sha256 = SHA256.Create();
digest = sha256.ComputeHash(data);
}
Other Modules
Let's continue with a look at some other modules provided by Gapotchenko.FX:
- Gapotchenko.FX
- Gapotchenko.FX.AppModel.Information
- Gapotchenko.FX.Collections
- Gapotchenko.FX.Console
- Gapotchenko.FX.Data
- Gapotchenko.FX.Diagnostics
- Gapotchenko.FX.IO
- Gapotchenko.FX.Linq
- Gapotchenko.FX.Math
- Gapotchenko.FX.Memory
- ➴ Gapotchenko.FX.Security.Cryptography
- Gapotchenko.FX.Text
- Gapotchenko.FX.Threading
- Gapotchenko.FX.Tuples
- Gapotchenko.FX.Versioning
Or look at the full list of modules.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. 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 is compatible. 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. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 is compatible. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.7.2
- Gapotchenko.FX (>= 2026.8.3)
- Gapotchenko.FX.Numerics (>= 2026.8.3)
-
.NETStandard 2.0
- Gapotchenko.FX (>= 2026.8.3)
- Gapotchenko.FX.Numerics (>= 2026.8.3)
-
.NETStandard 2.1
- Gapotchenko.FX (>= 2026.8.3)
- Gapotchenko.FX.Numerics (>= 2026.8.3)
-
net10.0
- Gapotchenko.FX (>= 2026.8.3)
- Gapotchenko.FX.Numerics (>= 2026.8.3)
-
net8.0
- Gapotchenko.FX (>= 2026.8.3)
- Gapotchenko.FX.Numerics (>= 2026.8.3)
-
net9.0
- Gapotchenko.FX (>= 2026.8.3)
- Gapotchenko.FX.Numerics (>= 2026.8.3)
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 |
|---|---|---|
| 2026.8.3 | 101 | 7/11/2026 |
| 2026.8.2 | 98 | 7/10/2026 |
| 2026.7.2 | 134 | 5/16/2026 |
| 2026.6.2 | 146 | 3/29/2026 |
| 2026.5.3 | 135 | 2/24/2026 |
| 2026.4.2 | 152 | 2/4/2026 |
| 2026.3.5 | 147 | 1/29/2026 |
| 2026.2.2 | 147 | 1/25/2026 |
| 2026.1.5 | 154 | 1/13/2026 |
| 2025.1.45 | 244 | 12/25/2025 |
| 2025.1.27-beta | 211 | 10/9/2025 |
| 2025.1.26-beta | 262 | 8/30/2025 |
| 2025.1.25-beta | 595 | 7/22/2025 |
| 2025.1.24-beta | 212 | 7/16/2025 |
| 2025.1.23-beta | 198 | 7/12/2025 |
| 2024.2.5 | 325 | 12/31/2024 |
| 2024.1.3 | 267 | 11/10/2024 |
| 2022.2.7 | 733 | 5/1/2022 |
| 2022.2.5 | 599 | 5/1/2022 |