2022年9月18日 星期日

PowerShell 安全密碼物件 SecureString 如何生成與使用

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")


沒有留言:

張貼留言