2015-04-07 66 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 
}