BrainEnterprise.Core.FastCrypt
3.0.0
Prefix Reserved
dotnet add package BrainEnterprise.Core.FastCrypt --version 3.0.0
NuGet\Install-Package BrainEnterprise.Core.FastCrypt -Version 3.0.0
<PackageReference Include="BrainEnterprise.Core.FastCrypt" Version="3.0.0" />
<PackageVersion Include="BrainEnterprise.Core.FastCrypt" Version="3.0.0" />
<PackageReference Include="BrainEnterprise.Core.FastCrypt" />
paket add BrainEnterprise.Core.FastCrypt --version 3.0.0
#r "nuget: BrainEnterprise.Core.FastCrypt, 3.0.0"
#:package BrainEnterprise.Core.FastCrypt@3.0.0
#addin nuget:?package=BrainEnterprise.Core.FastCrypt&version=3.0.0
#tool nuget:?package=BrainEnterprise.Core.FastCrypt&version=3.0.0
BrainEnterprise.Core.FastCrypt
Offuscamento rapido di stringhe: AES con chiave e IV fissi, risultato in Base64. Serve a non lasciare in chiaro valori di configurazione poco critici — un percorso, un identificativo, una stringa di collegamento ad un servizio interno — dentro file o colonne che qualcuno potrebbe aprire per caso.
Versione corrente: 3.0.0.
Non è uno strumento di sicurezza
Chiave e IV sono costanti compilate dentro l'assembly e uguali per tutte le installazioni. Chiunque abbia la DLL può ricavarli in pochi secondi e decifrare qualunque valore prodotto da questa libreria, oggi e in futuro.
Non usarlo per password, token, chiavi API, dati personali o qualunque cosa la cui riservatezza abbia un valore. Per quei casi servono chiavi gestite fuori dal codice — DPAPI, Windows Credential Manager, un vault — e un IV casuale per ogni cifratura.
Considera il risultato leggibile da chiunque, esattamente come Base64: la differenza è che non lo si legge a occhio.
Target Framework
- .NET Standard 2.0
- .NET Framework 4.6.2
- .NET 9
Installazione
dotnet add package BrainEnterprise.Core.FastCrypt
Utilizzo
Crypter espone due metodi, entrambi restituiscono un CrypterResult con il valore prodotto e
un messaggio. In caso di errore Result vale null e Message contiene la descrizione
dell'eccezione: i metodi non lanciano, quindi il controllo su Result è obbligatorio.
using BrainEnterprise.Core.FastCrypt;
var crypter = new Crypter();
CrypterResult cifrato = crypter.Crypt("Password123");
// cifrato.Result = "wlvScIOOwSSUNnA/gT8OvQ=="
// cifrato.Message = "String correctly encrypted."
if (cifrato.Result == null)
{
log.Warn($"Cifratura non riuscita: {cifrato.Message}");
return;
}
CrypterResult chiaro = crypter.Decrypt(cifrato.Result);
// chiaro.Message = "String correctly decrypted."
Round-trip
Dalla 3.0.0 il valore decifrato coincide con quello di partenza:
var cifrato = crypter.Crypt("Password123");
var chiaro = crypter.Decrypt(cifrato.Result);
chiaro.Result; // "Password123"
chiaro.Result == "Password123"; // true
Se aggiorni dalla 2.0.1 togli la pulizia manuale. Fino a quella versione
Decryptera impostato suPaddingMode.Nonementre la cifratura usava PKCS#7, quindi il valore restituito conteneva in coda i caratteri di riempimento e non coincideva mai con l'originale:"Password123"tornava lungo 16 caratteri, con cinque caratteri di codice 5. Un testo già multiplo di 16 riceveva un blocco intero di riempimento.Il codice che compensava il difetto — un
TrimEnd, unSubstringcalcolato sul padding — ora troncherebbe caratteri buoni: va rimosso. I valori già cifrati restano validi, non serve ricifrare nulla.
Casi al contorno
| Chiamata | Esito |
|---|---|
Crypt("") o Crypt(null) |
Result = null, Message riporta ArgumentNullException |
Decrypt("non-base64!!") |
Result = null, Message riporta l'errore di Base64 |
Decrypt(null) |
Result = null, messaggio di argomento nullo |
Il risultato è deterministico
Chiave e IV sono fissi, quindi lo stesso testo produce sempre lo stesso cifrato, anche fra istanze diverse e fra macchine diverse:
new Crypter().Crypt("Password123").Result == new Crypter().Crypt("Password123").Result; // true
Questo rende possibile confrontare due valori senza decifrarli, ma significa anche che il cifrato rivela quando due valori sono uguali — un altro motivo per non usarlo su dati riservati.
Stato del progetto
Dalla 3.0.0 il progetto è allineato alle altre Core Libraries: assembly firmato con la
chiave comune brainenterprise.core.snk, file di documentazione XML generato, licenza MIT
dichiarata nel pacchetto e output in MAIN\bin\{Debug|Release}\ come tutti gli altri.
Restano due differenze:
- non è incluso in nessuna delle solution del workspace e ha una propria
BrainEnterprise.Core.FastCrypt.slnx; - non è compreso nello script di build
build_core_MAIN_all.cmd, quindi va ricostruito a parte.
L'assembly ha lo stesso token di chiave pubblica delle altre librerie comuni
(826ab12a09357098): dalla 3.0.0 può quindi essere referenziato anche da assembly firmati,
cosa che prima non era possibile.
Licenza
MIT - 2026 Brain Enterprise S.r.l.
| 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 was computed. 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 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. |
| .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 | net461 was computed. net462 is compatible. net463 was computed. net47 was computed. net471 was computed. net472 was computed. 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.6.2
- No dependencies.
-
.NETStandard 2.0
- No dependencies.
-
net9.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.