我无法找到良好的 powershell 函数来利用非对称加密,所以我创建了以下内容。由于我是加密新手,因此希望获得任何关于改进的反馈。需要注意的是,这些功能非常基本。没有错误检查,几乎不需要解密后的写入主机。只想在添加受保护的内存等之前建立核心功能。
这已在两个系统上成功测试:Win8 w/Powershell v3 和 Win2008R2 w/Powershell v2。
Function Encrypt-Asymmetric([string]$Encrypt,[string]$CertPath,[string]$XmlExportPath)
{
# Encrypts a string with a public key
$pubcer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($CertPath)
$byteval = [System.Text.Encoding]::UTF8.GetBytes($Encrypt)
$pubcer.PublicKey.Key.Encrypt($byteval,$true) | Export-Clixml -Path $XmlExportPath
}
Function Decrypt-Asymmetric([string]$XmlPath,[string]$CertThumbprint)
{
# Decrypts cipher text using the private key
# Assumes the certificate is in the LocalMachine store
$store = new-object System.Security.Cryptography.X509Certificates.X509Store([System.Security.Cryptography.X509Certificates.StoreLocation]::LocalMachine)
$store.open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadOnly)
$cer = $store.Certificates | %{if($_.thumbprint -eq $CertThumbprint){$_}}
$ciphertext = Import-Clixml -Path $XmlPath
$decryptedBytes = $cer.PrivateKey.Decrypt($ciphertext,$true)
$ClearText = [System.Text.Encoding]::UTF8.GetString($decryptedBytes)
Write-Host $ClearText
}