Последовательные хэши 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
}