2017-05-10 85 views
0

我有一些參數存儲在本地硬盤上的加密文本文件中。這些參數必須保密。如何處理敏感數據並將其傳遞給函數?

如何從文件中讀取/解密參數並將它們傳遞給PowerShell函數,使變量永遠不會暴露/以純文本形式顯示?

我想使用安全字符串,但如何將它們傳遞給PowerShell功能?此我嘗試:

function Create-Securestring 
{ 
    $my_secure_password = convertto-securestring "password" -asplaintext -force 
    return $my_secure_password 

} 

function Accept-Securestring 
{ 
    param($secure) 
    $cast = [string]$secure ## maybe cast works? 
    $test = "$cast test string" 
    if ($secure -eq "password"){ write "works fine" } 
    return $test 
} 


$secure = Create-Securestring 
$test = Accept-Securestring $secure 
$test # -> System.Security.SecureString test string 

我給這裏的外部文件的一個例子,但是任何方法來存儲和使用如上述那樣被接受祕密數據。

+2

您如何期望能夠在不解密的情況下處理數據?如果你不使用它:爲什麼麻煩加載它呢? –

+0

是的,解密並轉換爲安全串。 –

+1

大量存儲(和恢復)文件中'SecureString'值的例子在線存在(以及本站點)。這裏的實際問題是什麼?你有什麼麻煩? –

回答

1

您的問題是將安全字符串轉換回常規字符串。你可以把它變成PScredential並使用像Ansgar鏈接的GetNetworkCredential().Password,或者你可以使用[System.Runtime.InteropServices.Marshal]中的一些方法。

function Create-Securestring { 
    convertto-securestring "password" -asplaintext -force 
} 

function Accept-Securestring { 
    $secure = Create-Securestring 
    $BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secure)    
    $cast = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) 
    "$cast test string" 
    if ($cast -eq "password"){ write "works fine" } 
} 

但請注意,將它們轉換回來使它們成爲「明文」。在第一條評論中,如果它現在被認爲是安全的,那麼你可以使它回到Ansgar的觀點。

+0

這是因爲這個問題我問了這個問題。 –

+0

@joops讓我對您的問題重新提出我的第一條評論:您必須解密您的數據,然後才能真正使用它們。意味着您的數據在某些時候將不加密。這是沒有辦法的。 –

+0

將'securestring'傳遞給'PSCredential對象'怎麼樣?例如:'$ MyCredential = New-Object -TypeName System.Management.Automation.PSCredential' -ArgumentList $ User,(Get-Content $ PasswordFile | ConvertTo-SecureString -Key $ key)'? –

相關問題