Ridavei.FileCrypto
1.0.0
dotnet add package Ridavei.FileCrypto --version 1.0.0
NuGet\Install-Package Ridavei.FileCrypto -Version 1.0.0
<PackageReference Include="Ridavei.FileCrypto" Version="1.0.0" />
<PackageVersion Include="Ridavei.FileCrypto" Version="1.0.0" />
<PackageReference Include="Ridavei.FileCrypto" />
paket add Ridavei.FileCrypto --version 1.0.0
#r "nuget: Ridavei.FileCrypto, 1.0.0"
#:package Ridavei.FileCrypto@1.0.0
#addin nuget:?package=Ridavei.FileCrypto&version=1.0.0
#tool nuget:?package=Ridavei.FileCrypto&version=1.0.0
Ridavei.FileCrypto
What is FileCrypto?
Ridavei.FileCrypto is a cross-platform .NET library that orchestrates file encryption/decryption by selecting a user-provided ICrypto implementation based on ContentType.
This package does not implement cryptography algorithms.
You provide your ownICryptoimplementations (AES, custom, etc.). FileCrypto only loads the input and routes it to the right implementation.
Installation
dotnet add package Ridavei.FileCrypto
How it works
- You implement
ICryptofor a given MIME media type (ContentType). - You register it in
FileCryptoBuilder(SetCryptoMethod). - You create a crypto runner for:
- file paths (
CreateFilePathCrypto()), or - streams (
CreateStreamCrypto()), or - custom loaders (
CreateGenericCrypto(...)).
- file paths (
- You call
Encrypt(...)/Decrypt(...).
Important behavior
- Crypto methods are stored by normalized media type (e.g.
"text/plain"), case-insensitive. - Registering a method for an already-registered media type overwrites the previous one.
API contract (important)
Who owns streams?
- The stream returned by
ICrypto.Encrypt(...)/ICrypto.Decrypt(...)is owned by the caller (you) and should be disposed by the caller. - Your
ICryptoimplementation must return a new, independentStreaminstance (it must not return the same stream instance it received). - Your
ICryptoimplementation should not dispose the input stream.
Input stream lifetime (important)
- When using
CreateFilePathCrypto()(file path input), the library opens the file stream internally and may dispose it after the crypto operation finishes. - When using
CreateStreamCrypto()(stream input), the input stream is owned by the caller and should be disposed by the caller.
Stream position / seeking
ICryptoreceives the input stream exactly as provided by the loader (including its currentPosition).- If your algorithm requires reading from the beginning, ensure the stream is seekable and set
Position = 0in yourICryptoimplementation.
Wrong password / validation
Handling a wrong password (exceptions, validation, authentication tags, etc.) is entirely the responsibility of the user-provided ICrypto implementation.
Examples
Creating a class to decrypt/encrypt files for a specific ContentType.
using System.IO;
using System.Net.Mime;
using Ridavei.FileCrypto.Interfaces;
namespace TestProgram
{
internal sealed class TextPlainCrypto : ICrypto
{
public static readonly ICrypto Instance = new TextPlainCrypto();
public static readonly ContentType TxtContentType = new (MediaTypeNames.Text.Plain);
public Stream Encrypt(Stream inputData, string password)
{
// Implement your encryption here.
// Must return a NEW Stream instance (independent from inputData).
throw new NotImplementedException();
}
public Stream Decrypt(Stream inputData, string password)
{
// Implement your decryption here.
// Must return a NEW Stream instance (independent from inputData).
throw new NotImplementedException();
}
}
}
File decryption/encryption using the class created above
using System.IO;
using System.Net.Mime;
using Ridavei.FileCrypto;
namespace TestProgram
{
class Program
{
private static readonly FileCryptoBuilder _builder = FileCryptoBuilder
.CreateBuilder()
.SetCryptoMethod(TextPlainCrypto.TxtContentType, TextPlainCrypto.Instance);
public static void Main (string[] args)
{
ContentType contentType = TextPlainCrypto.TxtContentType;
string filePath = "example.txt";
string password = "<PASSWORD>";
var crypto = _builder.CreateFilePathCrypto();
using (Stream decryptedFile = crypto.Decrypt(filePath, contentType, password))
{
//Save/use decryptedFile.
}
// Similarly:
// using (var encryptedFile = crypto.Encrypt(filePath, contentType, password)) { }
}
}
}
Creating extensions
using Ridavei.FileCrypto;
namespace TestProgram
{
public static class EncryptExt
{
public static FileCryptoBuilder UseTextPlainCrypto(this FileCryptoBuilder builder)
{
return builder.SetCryptoMethod(TextPlainCrypto.TxtContentType, TextPlainCrypto.Instance);
}
}
}
| 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 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. |
| .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 was computed. |
| .NET Framework | net35 is compatible. net40 was computed. net403 was computed. net45 was computed. net451 was computed. net452 is compatible. net46 was computed. net461 was computed. net462 is compatible. net463 was computed. net47 was computed. net471 was computed. net472 is compatible. net48 is compatible. 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 3.5
- No dependencies.
-
.NETFramework 4.5.2
- No dependencies.
-
.NETFramework 4.6.2
- No dependencies.
-
.NETFramework 4.7.2
- No dependencies.
-
.NETFramework 4.8
- No dependencies.
-
.NETStandard 2.0
- No dependencies.
-
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 |
|---|---|---|
| 1.0.0 | 38 | 12/22/2025 |