¿Me han engañado? es mi persona a la que recurrir cuando se trata de verificar si una contraseña ha sido expuesta en alguna violación de datos antes. Solo voy allí, introduzco la contraseña que me gustaría comprobar y hago clic en el pwned? botón. Y obtendrá el resultado de inmediato.
O, mejor aún, dado que Have I Been Pwned proporciona una API increíble para que cualquiera pueda crear una aplicación para buscar rápidamente la lista de cuentas pwned a través de un servicio REST, podemos crear un script de PowerShell para agilizar el proceso.
Estos son los pasos para lograr esto:
- Ingrese una contraseña y cree un hash.
- Envíe los primeros 5 bytes del hash a la API.
- Obtenga la lista completa de hashes que comienzan con estos 5 bytes.
- Compruebe si alguno de ellos en la lista coincide con su hash de contraseña completo.
Una cosa a tener en cuenta es que, dado que solo envía los primeros 5 bytes del hash a través de Internet, no compromete su hash debido al proceso de verificación.
# input password to hash
Add-Type -AssemblyName Microsoft.VisualBasic
$password = [Microsoft.VisualBasic.Interaction]::InputBox("Password to test" , "Password Checker", "")
# get password hash
$stream = [IO.MemoryStream]::new([Text.Encoding]::UTF8.GetBytes($Password))
$hash = Get-FileHash -InputStream $stream -Algorithm SHA1
$stream.Close()
$stream.Dispose()
# find first five and subsequent hash characters
$prefix, $suffix = $hash.Hash -split '(?<=^.{5})'
# ask for matching passwords with the same first 5 hash digits
$url = "https://api.pwnedpasswords.com/range/$prefix"
$response = Invoke-RestMethod -Uri $url -UseBasicParsing
# find the exact match
$lines = $response -split 'rn'
$seen = foreach ($line in $lines)
{
if ($line.StartsWith($suffix)) {
[int]($line -split ':')[-1]
break
}
}
if (!$seen ) {$seen = "0"}
"The password '$Password' has been seen {0:n0} times." -f $seen
También puede descargarlo a continuación si lo desea.
Cuando inicie el código, primero aparecerá un cuadro de entrada donde puede escribir la contraseña que desea verificar.
Además, puede convertir el script en una función e incrustarlo en su propio script para comprobar una gran cantidad de hashes que exportó de su propia lista.
Finalmente, tengo que dar el crédito a PowerTips para este increíble consejo, aunque modifiqué un poco el código para una mejor entrada y salida.