PowerShell 安全密碼物件 SecureString 如何生成與使用
安全密碼網上看了一堆好像都沒人整理起來,這次有用到一次把全部打通了
整理啊下大概就下面幾種物件要互轉
- 原始密碼
- 加密暗號
- 安全字串
全部的轉換方法可以參考下面的範例
有一點要注意的是,加密過後的安全密碼只能在原機原使用者解密,無法在其他電腦解密的。
安全物件與明暗碼轉換
# 普通字串密碼
$PassWord = "Charlotte.Hong"
# 普通字串 -> 安全密碼物件
$secure = ConvertTo-SecureString $PassWord -AsPlainText -Force
# 安全密碼物件 -> 加密字串
$encrypt = ConvertFrom-SecureString -SecureString $secure
# 加密字串 -> 安全密碼物件
$secure = ConvertTo-SecureString -String $encrypt
# 安全密碼物件 -> 普通密碼字串
$bstr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($secure)
$Plaintext = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($bstr)
快速轉換
# 加密密碼
$encrypt = ConvertFrom-SecureString(ConvertTo-SecureString -A -F "PassWD")
# 解密密碼
[Runtime.InteropServices.Marshal]::PtrToStringBSTR([Runtime.InteropServices.Marshal]::SecureStringToBSTR((ConvertTo-SecureString $encrypt)))
加密密碼並把他複製到剪貼簿中
&{param($_)ConvertFrom-SecureString($_|ConvertTo-SecureString -A -F)|scb} PassWD
如果要避免密碼被紀錄在歷史命令中,可以從CMD命令提示字元執行
(這行也會自動複製到剪貼簿)
PowerShell -nop "&{param($_)ConvertFrom-SecureString($_|ConvertTo-SecureString -A -F)|scb} PassWD"
兩個方便使用的小函式
# 獲取安全密碼字串
function EncryptPassWord {
[CmdletBinding(DefaultParameterSetName = "A")]
param (
[Parameter(Position = 0, ParameterSetName = "A", Mandatory)]
[String] $String,
[Parameter(Position = 0, ParameterSetName = "B", Mandatory)]
[Object] $Object
)
if ($Object) { $secure = $Object } else {
$secure = (ConvertTo-SecureString $String -AsPlainText -Force)
}
return (ConvertFrom-SecureString $secure)
} # EncryptPassWord "MyPassWord"
# 從安全密碼字串獲取原密碼
function DecryptPassWord {
[CmdletBinding(DefaultParameterSetName = "A")]
param (
[Parameter(Position = 0, ParameterSetName = "A", Mandatory)]
[String] $String,
[Parameter(Position = 0, ParameterSetName = "B", Mandatory)]
[Object] $Object
)
if ($Object) { $secure = $Object } else {
$secure = (ConvertTo-SecureString $String)
}
$bsr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($secure)
return [Runtime.InteropServices.Marshal]::PtrToStringBSTR($bsr)
} # DecryptPassWord (EncryptPassWord "MyPassWord")