如何处理敏感数据,并将其传递给函数?

时间:2017-05-10 16:05:49

标签: powershell encryption

我有一些参数存储在本地硬盘上的加密文本文件中。这些参数必须保密。

如何读取/解密文件中的参数并将它们传递给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

我在这里给出了一个外部文件的例子,但是接受了如上所述存储和使用秘密数据的任何方法。

1 个答案:

答案 0 :(得分:1)

您的问题是将安全字符串转换回常规字符串。您可以将其转换为PScredential并使用GetNetworkCredential().Password类似Ansgar链接,或者您可以使用[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" }
}

但请注意,将它们转换回来会使它们成为"明文"。这会让你回到第一条评论中的安斯加的观点,如果它现在应该是安全的,那么现在就让它变得不安全了。