2015-04-07 29 views
1

加密的密码存储在我的.ps1脚本中。在新环境中设置脚本时,用户必须在脚本开始时手动配置此密码。我已经设置了一个开关参数,这样用户就可以用这种方式运行脚本,它会给用户提供所需的散列。但是,当提示输入密码两次以确保没有输入错误 - 或其他 - 我无法获得密码哈希匹配。为了证明,我可以手动在PowerShell中连续进入这两次,得到不同的结果进入完全相同的密码:连续的SecureString散列不匹配

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

这是有或没有-Key-SecureKey参数。我如何提示用户输入密码(两次以确保它们匹配),如果/当它们匹配时输出密码哈希值?

+1

我不认为你能做到这一点,在[DPAPI(HTTPS:/ /msdn.microsoft.com/en-us/library/ms995355.aspx)(当你需要一个'SecureString'时,在后台调用它)在加密字符串时派生一个依赖随机salt的会话密钥。你必须解密他们进行比较 –

回答

0

这不是一个非常漂亮的解决方案,但做这项工作的解密密码给予,然后比较它们:

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 
}