Canducci.GeneratePassword.Extensions.DependencyInjection 4.0.0

dotnet add package Canducci.GeneratePassword.Extensions.DependencyInjection --version 4.0.0
                    
NuGet\Install-Package Canducci.GeneratePassword.Extensions.DependencyInjection -Version 4.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="Canducci.GeneratePassword.Extensions.DependencyInjection" Version="4.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Canducci.GeneratePassword.Extensions.DependencyInjection" Version="4.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Canducci.GeneratePassword.Extensions.DependencyInjection" />
                    
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 Canducci.GeneratePassword.Extensions.DependencyInjection --version 4.0.0
                    
#r "nuget: Canducci.GeneratePassword.Extensions.DependencyInjection, 4.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 Canducci.GeneratePassword.Extensions.DependencyInjection@4.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=Canducci.GeneratePassword.Extensions.DependencyInjection&version=4.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Canducci.GeneratePassword.Extensions.DependencyInjection&version=4.0.0
                    
Install as a Cake Tool

Canducci GeneratePassword

Run Unit Tests Coverage Status

Biblioteca para hash de senha com dois conjuntos separados:

Argon2id (padrao recomendado)

alternate text is missing from this package README image NuGet

PBKDF2 (compatibilidade e cenarios especificos)

alternate text is missing from this package README image NuGet

Pacotes NuGet

Argon2id (padrao recomendado)

PM> Install-Package Canducci.GeneratePassword.Argon2id
PM> Install-Package Canducci.GeneratePassword.Argon2id.Extensions.DependencyInjection

PBKDF2

PM> Install-Package Canducci.GeneratePassword
PM> Install-Package Canducci.GeneratePassword.Extensions.DependencyInjection

Uso rapido - Argon2id (padrao)

Biblioteca (sem DI)

using Canducci.GeneratePassword.Argon2id;

string password = "abc@#$%12";

IArgon2idConfiguration config = new Argon2idConfiguration();
IArgon2idPasswordHasher hasher = new Argon2idPasswordHasher(config);

// Gera salt + hash separados
IArgon2idValue value = hasher.Hash(password);

// Valida senha
bool valid1 = hasher.Valid(password, value);
bool valid2 = hasher.Valid(password, value.Salt, value.Hashed);

// Formato versionado para armazenamento:
// argon2id-v1$iterations$memoryKb$parallelism$salt$hash
string encoded = hasher.HashEncoded(password);
bool valid3 = hasher.ValidEncoded(password, encoded);

ASP.NET Core com DI

using Canducci.GeneratePassword.Argon2id;
using Canducci.GeneratePassword.Argon2id.Extensions.DependencyInjection;

public void ConfigureServices(IServiceCollection services)
{
    services.AddArgon2idPasswordHasher(config =>
    {
        // Opcionais: defaults seguros ja sao aplicados
        config.IterationCount = Argon2idConfiguration.DefaultIterationCount;
        config.MemorySizeKb = Argon2idConfiguration.DefaultMemorySizeKb;
        config.DegreeOfParallelism = Argon2idConfiguration.DefaultDegreeOfParallelism;
    });
}
using Canducci.GeneratePassword.Argon2id;

public class HomeController
{
    private readonly IArgon2idPasswordHasher _hasher;

    public HomeController(IArgon2idPasswordHasher hasher)
    {
        _hasher = hasher;
    }
}

Uso rapido - PBKDF2

using Canducci.GeneratePassword;

IPbkdf2Configuration config = new Pbkdf2Configuration();
IPbkdf2PasswordHasher hasher = new Pbkdf2PasswordHasher(config);

IPbkdf2Value value = hasher.Hash("abc@#$%12");
bool valid = hasher.Valid("abc@#$%12", value);

Migracao PBKDF2 → Argon2id

Estratégia recomendada: migracao progressiva no login (sem reset de senha em massa).

Fluxo:

  1. Tente validar primeiro com Argon2id.
  2. Se falhar, tente validar com PBKDF2 legado.
  3. Se PBKDF2 validar, gere novo hash Argon2id e atualize no banco.
  4. Marque o registro como Argon2id (ou salve no formato encoded com prefixo de algoritmo).

Exemplo:

using Canducci.GeneratePassword;
using Canducci.GeneratePassword.Argon2id;

public bool ValidateAndRehash(
    string password,
    string algorithm,           // "argon2id" ou "pbkdf2"
    string salt,
    string hash,
    Action<string, string, string> updatePassword) // (algorithm, salt, hash)
{
    IArgon2idPasswordHasher argon = new Argon2idPasswordHasher(new Argon2idConfiguration());
    IPbkdf2PasswordHasher pbkdf2 = new Pbkdf2PasswordHasher(new Pbkdf2Configuration());

    if (algorithm == "argon2id")
    {
        return argon.Valid(password, salt, hash);
    }

    if (algorithm == "pbkdf2")
    {
        bool validLegacy = pbkdf2.Valid(password, salt, hash);
        if (!validLegacy)
        {
            return false;
        }

        // Rehash automatico para Argon2id apos login valido
        IArgon2idValue newValue = argon.Hash(password);
        updatePassword("argon2id", newValue.Salt, newValue.Hashed);
        return true;
    }

    return false;
}

Compatibilidade legada

BCrypt, BCryptConfiguration, BCryptValue e AddGeneratePassword continuam disponiveis somente por compatibilidade e estao marcados como Obsolete.

Product 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 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. 
.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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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
4.0.0 68 3/5/2026
3.0.0 268 10/21/2024
2.0.0 839 2/10/2022
1.0.8 3,242 2/10/2022
1.0.7 613 7/24/2021
1.0.6 582 5/16/2021
1.0.5 607 1/25/2021
1.0.4 609 12/11/2020