我希望加密我想要在不同的PowerShell脚本中使用的文本,而不会影响其安全性,因为其他用户将使用包含该文本的脚本。基本上我想隐藏所有人的文本,并且对使用该特定文本的所有PowerShell脚本毫不费力地使用它。文本可以存储在文件中,以便在不同的脚本中使用。我尝试过基本的东西:
$text = Read-Host "Enter the text" -AsSecureString
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($text)
$Plaintext = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
Write-Host "Text is: " $PlainText
但问题是,如果你在同一台计算机上,很容易找到它。如果有的话,我需要一些万无一失的方法。这是我的第一个问题所以请忽略我的错误,如果有的话。
答案 0 :(得分:1)
在您的情况下,您需要一个特定的密钥来加密字符串。
用于设置密钥:
function Set-Key {
param([string]$string)
$length = $string.length
$pad = 32-$length
if (($length -lt 16) -or ($length -gt 32)) {Throw "String must be between 16 and 32 characters"}
$encoding = New-Object System.Text.ASCIIEncoding
$bytes = $encoding.GetBytes($string + "0" * $pad)
return $bytes
}
用于设置加密数据:
function Set-EncryptedData {
param($key,[string]$plainText)
$securestring = new-object System.Security.SecureString
$chars = $plainText.toCharArray()
foreach ($char in $chars) {$secureString.AppendChar($char)}
$encryptedData = ConvertFrom-SecureString -SecureString $secureString -Key $key
return $encryptedData
}
用于解密数据:
function Get-EncryptedData {
param($key,$data)
$data | ConvertTo-SecureString -key $key |
ForEach-Object {[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($_))}
}
使用方法:
$plainText = "Some Super Secret Password"
$key = Set-Key "AGoodKeyThatNoOneElseWillKnow"
$encryptedTextThatIcouldSaveToFile = Set-EncryptedData -key $key -plainText $plaintext
$encryptedTextThatIcouldSaveToFile ## - sample output 507964ed3a197b26969adead0212743c378a478c64007c477efbb21be5748670a7543cb21135ec324e37f80f66d17c76c4a75f6783de126658bce09ef19d50da
$DecryptedText = Get-EncryptedData -data $encryptedTextThatIcouldSaveToFile -key $key
$DecryptedText
参考链接:Encrypting & Decrypting Strings with PS
希望它有所帮助。