Cómo generar contraseñas aleatorias seguras en PowerShell

Hay muchos scripts y cmdlets para generar contraseñas en PowerShell. Desafortunadamente, la mayoría de ellos no son seguros y no deberías utilizarlos. Entonces, veámoslos y veamos cuál deberías usar. En este artículo, aprenderá cómo generar contraseñas aleatorias seguras en PowerShell.

Antes de empezar

Hay muchas formas de generar contraseñas aleatorias en PowerShell. Sin embargo, la mayoría no sabe que la mayoría de los scripts o comandos en realidad no generan contraseñas seguras y ¡no debes usarlos!

Veamos los cmdlets y clases de generadores aleatorios de contraseñas más populares:

  1. Obtener aleatorio- ElObtener aleatorioEl cmdlet solo funciona en Windows PowerShell 5.1 y, lo que es más importante, no garantiza una aleatoriedad criptográficamente segura. ¡Deshazte de él!
  2. Get-SecureAleatorio- ElGet-SecureAleatorioEl cmdlet solo funciona en PowerShell 7.x. Es un cmdlet excelente. Aunque no es compatible con versiones anteriores para los usuarios que quieran ejecutarlo en Windows PowerShell 5.1.
  3. Proveedor de servicios RNGCrypto- ElProveedor de servicios RNGCryptoLa clase abstracta está obsoleta. Así que no deberías usarlo en ningún lado. ¡Deshazte de él!
  4. Generador de números aleatorios- ElGenerador de números aleatoriosLa clase abstracta es segura. La ventaja es que funciona tanto para Windows PowerShell 5.1 como para PowerShell 7.x.

Entonces, recomiendo usarGenerador de números aleatoriospara generar una contraseña aleatoria segura en PowerShell.

Descargue el script de PowerShell Get-RandomPassword.ps1 y colóquelo enC:guionescarpeta.

Asegúrese de que el archivo esté desbloqueado para evitar errores al ejecutar el script. Lea más en el artículo Error sin firma digital al ejecutar el script de PowerShell.

Otra opción es copiar y pegar el código siguiente en el Bloc de notas. Dale el nombreObtener-ContraseñaAleatoria.ps1y colóquelo en elC:guionescarpeta.

<#
    .SYNOPSIS
    Get-RandomPassword.ps1

    .DESCRIPTION
   This script generates passwords based on user-defined criteria for length, character
   sets, and quantity. It ensures each password contains at least one character from
   each specified set.

   .LINK
    www.alitajran.com/generate-secure-random-passwords-powershell/

    .NOTES
    Written by: ALI TAJRAN
    Website:    alitajran.com
    X:          x.com/alitajran
    LinkedIn:   linkedin.com/in/alitajran

    .CHANGELOG
    V1.00, 10/12/2024 - Initial version
#>

param (
    # The length of each password which should be created.
    [Parameter(Mandatory = $true)]
    [ValidateRange(8, 255)]
    [Int32]$Length,

    # The number of passwords to generate.
    [Parameter(Mandatory = $false)]
    [Int32]$Count = 1,

    # The character sets the password may contain.
    # A password will contain at least one of each of the characters.
    [String[]]$CharacterSet = @(
        'abcdefghijklmnopqrstuvwxyz',
        'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
        '0123456789',
        '!$%&^.#;'
    )
)

# Generate a cryptographically secure seed
$bytes = [Byte[]]::new(4)
$rng = [System.Security.Cryptography.RandomNumberGenerator]::Create()
$rng.GetBytes($bytes)
$seed = [System.BitConverter]::ToInt32($bytes, 0)
$rnd = [Random]::new($seed)

# Combine all character sets for random selection
$allCharacterSets = [String]::Concat($CharacterSet)

try {
    for ($i = 0; $i -lt $Count; $i++) {
        $password = [Char[]]::new($Length)
        $index = 0

        # Ensure at least one character from each set
        foreach ($set in $CharacterSet) {
            $password[$index++] = $set[$rnd.Next($set.Length)]
        }

        # Fill remaining characters randomly from all sets
        for ($j = $index; $j -lt $Length; $j++) {
            $password[$index++] = $allCharacterSets[$rnd.Next($allCharacterSets.Length)]
        }

        # Fisher-Yates shuffle for randomness
        for ($j = $Length - 1; $j -gt 0; $j--) {
            $m = $rnd.Next($j + 1)
            $t = $password[$j]
            $password[$j] = $password[$m]
            $password[$m] = $t
        }

        # Output each password
            Write-Output ([String]::new($password))
    }
}
catch {
    Write-Host "Error: $_" -ForegroundColor Red
}

Ahora que todo está en su lugar, veamos los ejemplos de PowerShell para generar contraseñas seguras.

Más información:Cómo ver las contraseñas guardadas en iPhone y exportarlas

Genere contraseñas aleatorias seguras. Ejemplos de scripts de PowerShell

Genere una contraseña aleatoria segura con una longitud de 20 caracteres.

C:scripts.Get-RandomPassword.ps1 -Length "20"

Genere 100 contraseñas aleatorias seguras con una longitud de 20 caracteres.

C:scripts.Get-RandomPassword.ps1 -Length "20" -Count "100"

Genere una contraseña aleatoria segura con un mínimo de 1 de cada conjunto de caracteres.

C:scripts.Get-RandomPassword.ps1 -Length 20 -CharacterSet "ABCDEF", "1234567890", "!@#$%^&*()"

Si tiene scripts de PowerShell en los que desea generar contraseñas aleatorias, utilice este script como función. Aquí hay dos artículos que hacen eso.

  • Forzar cambio de contraseña para todos los usuarios en Microsoft 365
  • Creación masiva de usuarios de AD con contraseñas aleatorias

Conclusión

Aprendió a generar contraseñas aleatorias seguras en PowerShell. Utilice el cmdlet Get-SecureRandom en PowerShell si está seguro de que desea utilizar únicamente PowerShell 7. Si desea generar contraseñas en todas las versiones de PowerShell, es mejor utilizar la clase abstracta RandomNumberGenerator. Eso es lo que me gusta usar y recomendar.

¿Disfrutaste este artículo? También te puede interesar Cómo proteger las contraseñas de Active Directory contra infracciones. No olvides seguirnos y compartir este artículo.

Related Posts