PublicKey.Key.Encrypt错误您无法在空值表达式上调用方法

时间:2015-04-09 17:03:13

标签: powershell powershell-v4.0

我一直在这个脚本上得到空值错误:

$key = $cert.PrivateKey.Decrypt($object.Key, $true)

它来自powershell示例,所以我不知道它为什么不起作用。任何线索?通过使用拇指打印正确找到证书,密钥就在其中。

这是在带有powershell v4的Windows 2012 R2上运行

try
{
    $object = Import-Clixml -Path c:\temp\encryptionTest.xml

    $thumbprint = '58E3080C84336ECFBBF9EFFCFF98788880F0BA5F'

    $cert = Get-Item -Path Cert:\LocalMachine\My\$thumbprint -ErrorAction Stop

    $key = $cert.PrivateKey.Decrypt($object.Key, $true)
    $cert.PrivateKey
    $secureString = $object.Payload | ConvertTo-SecureString -Key $key
    $secureString
}
finally
{
    if ($null -ne $key) { [array]::Clear($key, 0, $key.Length) }
}

更新:我联系了脚本作者,他提到问题是.NET不能很好地开箱即用CNG(加密下一代)证书,这些证书被标识为版本3(这正是我们使用的版本)他提供了一个与之合作的新功能。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,但没有从Cert:\ LocalMachine \ My获取证书,而是将其更改为

$cert = Get-Item -Path Cert:\CurrentUser\My\$thumbprint -ErrorAction Stop

它工作正常。

答案 1 :(得分:0)

我联系了脚本作者,他提到问题是.NET不能很好地开箱即用CNG(加密下一代)证书,这些证书被标识为版本3(这正是我们使用的版本)他提供了一个与之合作的新功能。

https://github.com/dlwyatt/ProtectedData