Последовательные хэши SecureString не совпадают

Зашифрованный пароль хранится в моем скрипте.ps1. При настройке сценария в новой среде пользователь должен вручную настроить этот пароль в начале сценария. Я установил параметр switch, чтобы пользователь мог запустить скрипт таким образом, и он даст пользователю необходимый хеш. Тем не менее, при запросе ввести пароль дважды, чтобы убедиться, что в нем нет опечаток или чего-то подобного, я не могу получить совпадающие хеши паролей. Чтобы продемонстрировать, я могу вручную ввести это в PowerShell дважды подряд и получить разные результаты, введя один и тот же пароль:

Read-Host -AsSecureString 'Enter password' | ConvertFrom-SecureString

Это с или без -Key или же -SecureKey параметр. Как я могу запросить у пользователя пароль (дважды, чтобы убедиться, что они совпадают) и, если / когда они совпадают, вывести хеш пароля?

1 ответ

Это не очень красивое решение, но оно выполняет расшифровку заданных паролей и затем сравнивает их:

if ([Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringtoBSTR(($enterpw | ConvertTo-SecureString -Key $key))) -ne [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringtoBSTR(($enterpw2 | ConvertTo-SecureString -Key $key)))) {
    Write-Host "Given passwords do not match"
    Break
}
Другие вопросы по тегам